C 筆記七(檔案 異常)

2021-10-10 20:39:51 字數 3768 閱讀 2952

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關於檔...