1.基本概念
原由:程式執行時資料都是臨時資料,程式一旦執行結束便會被釋放,通過檔案可以將資料持久化。
c++中檔案操作的標頭檔案為< fstream >
檔案操作的三大類(class)
其一,ofstream 寫操作
其二,ifstream 讀操作
其三,fstream 讀寫操作
2.文字檔案
寫檔案的步驟:
1>包含標頭檔案 #include< fstream >
2>建立流物件 ofstream ofs;
3>開啟檔案 ofs.open(「檔案路徑」,開啟方式) ;
4>寫資料 ofs << 「寫入資料」;
5> 關閉檔案 ofs.close();
檔案開啟方式:
ios::in 為讀檔案而開啟檔案
ios::out 為寫檔案而開啟檔案
注意:如果要配合使用開啟方式,那就需要用|操作符
eg:ios::binary|ios::out
讀檔案的步驟:
1>包含標頭檔案 #include< fstream >
2>建立流物件 ifstream ifs;
3>開啟檔案 ifs.open(「檔案路徑」,開啟方式) ;
4>讀資料 四種方式讀取;(見下面**,前三個中記憶乙個)
5> 關閉檔案 ifs.close();
void
test01()
void
test02()
//讀資料方式1。>>操作符過載,一次讀一行!
char buf1[
1024]=
;while
(ifs >> buf1)
//讀資料方式2
char buf2[
1024]=
;while
(ifs.
getline
(buf2,
sizeof
(buf2)))
//讀資料方式3
string buf3;
while
(getline
(ifs,buf3)
)//讀資料方式4,效率太低不推薦
char c;
while
((c = ifs.
get())
!=eof
)//eof表示end of file檔案尾
ifs.
close()
;}intmain()
注意:對檔案進行操作時可以少用string多用陣列替代,並且開啟方式裡的路徑是「/」。
3.二進位制檔案
對於二進位制檔案,開啟方式指定為ios::binary
寫檔案,主要利用流物件呼叫成員函式write
函式原型:ostream& write(const char* buffer,int len);
引數解釋:字元指標buffer指向記憶體中一段儲存空間,len是讀寫位元組數
讀寫例項如下:
class
person
;void
test01()
;//想想結構體
ofs.
write((
const
char*)
&p,sizeof
(person));
ofs.
close()
;}void
test02()
person p1;
ifs.
read((
char*)
&p1,
sizeof
(person));
cout <<
"name:"
<< p1.m_name <<
"\t"
<<
"age:"
<< p1.m_age << endl;
ifs.
close()
;}intmain()
2.1基本概念
1> 異常處理機制分為兩個主要部分:異常的鑑定與發出,異常的處理方式。
2> 基本步驟:異常出現後,程式的執行被暫停,異常處理機制開始搜尋程式中有能力處理異常的地點,異常被處理後,程式從異常處理點接著執行下去。
3> 異常:大部分被丟擲的異常都是特定的異常類(也許形成乙個繼承體系),有時也是乙個整數、字串等。
2.2丟擲異常
1> 異常丟擲關鍵字:throw
2> 丟擲異常中的異常是乙個物件
2.3捕獲異常
1> 捕獲異常的關鍵字:catch
2> 語法:catch(){},小括號內放乙個物件,用於和throw丟擲的異常匹配;花括號用於處理異常。
3> 過程:我們可以通過一連串的或者單條catch子句去捕獲丟擲來的異常物件,當有多條catch時,丟擲的異常會依次與catch對比,如果匹配了,便執行花括號內的語句,執行完後再由正常程式重新接手,從異常處理點繼續向下執行。倘若異常沒能得到完整的處理,我們可以繼續在花括號內加個throw;,以尋求其他catch子句的協助,再一次丟擲異常。
4> 再次丟擲:catch子句中最後加個throw;即可。
5> 一網打盡:catch(…),不管丟擲什麼異常,都會**獲。
2.4提煉異常
1> 語法:try{}
2> 處理過程:catch子句應該與try一起,try內有任何異常發生,丟擲由catch處理。如果處理不了,沒有匹配的,那就終止try塊所在函式的執行,在函式呼叫端去尋找匹配的catch語句,如果找不到就一直上溯,直到找到為止,如果到了main()還找不到,那就呼叫標準庫的terminate()——中斷整個程式。(詳細見《essential c++》p196)
示例:
void
test()
}catch
(int i)
cout <<
"end!"
<< endl;
}
2.5區域性資源管理
1> 問題:倘若在某個函式內使用new開闢了記憶體,在函式結尾處delete掉了,但是new與delete之間出現了異常,而且未得到解決,那麼顯然delete是不會被執行的。這就造成了記憶體洩漏!
2> 解決方案1:匯入try—catch,而且catch是一網打盡,花括號內執行釋放資源的操作。此方案雖然可以解決問題,但是釋放資源的語句要寫兩遍!
3> 解決方案2:我們一般把資源請求放在建構函式中,資源釋放就放到析構函式中。c++保證函式結束前會呼叫所有區域性物件的析構函式。所以可以使用區域性物件。如果是在堆開闢空間那就用智慧型指標就好了。
2.6標準異常
1> 標準庫定義了一套異常類體系,其根部是乙個名為exception的抽象類,裡面含有乙個what()的虛函式,會返回const char *,用於表明異常。比如當new表示式無法再分配到足夠記憶體時就會丟擲bad_alloc異常,該異常就是派生自exception基類,也有自己的what()函式。
2> 使用:我們可以將自己寫的異常類繼承exception,這樣當丟擲我們寫的異常類物件時,就會被所有打算捕獲抽象基類exception的程式**捕獲,所以我們可以讓那些程式**認識這個類,也不必使用一網打盡的方式捕獲所有異常了。
perl學習筆記七 檔案
檔案和資料夾 一 開啟 關閉檔案 open file handle,file path close file handle 二 讀檔案 語句 line 從檔案中讀取一行資料儲存到簡單變 量 line中並把檔案指標向後移動一行。語句 array 把檔案的全部內容讀入陣列 array,檔案的每一行 含回...
七 檔案處理
檔案操作 io操作 檔案操作和遠端網路都可以統稱為 io操作。文字檔案和二進位制檔案 文字檔案儲存的是普通字元,python是預設unicode碼,可以用記事本開啟,二進位制檔案是位元組儲存,無法用記事本開啟,用其他軟體開啟。建立檔案物件open f open r d a.txt r 這裡要注意,在...
盞茶python 七 檔案 異常和模組
2.異常處理 3.模組介紹 盞茶python 一 語言特性及環境配置 盞茶python 二 基本資料型別 盞茶python 三 組合資料型別 盞茶python 四 控制流 盞茶python 五 函式 盞茶python 六 類 盞茶python 七 檔案 異常和模組 本節我們將要講解python關於檔...