C 二進位制檔案拷貝及異常處理詳解

2021-10-05 05:52:49 字數 3516 閱讀 6091

異常捕捉機制:

一旦執行throw立刻轉到catch,不再進行throw下面內容;

可設定不同型別throw值,但一次只能throw乙個值, 與return類似

若乙個型別有多個值,需拷貝,可動態記憶體分配後指標傳遞, 但麻煩. 通常直接const char* err接收即可

...

throw

"肉肉好帥!";.

..throw

"肉肉好傻!";.

..throw

"肉肉好萌!"

;try()

catch

(const

char

* err)

catch順次進行,只執行乙個匹配分支;catch(…)通配。

如果throw float無匹配,會中斷(預設功能會呼叫abort終止程式),並顯示microsoft c++異常:記憶體位置******處的float

最近的catch才能拿到throw,若最近的catch再throw,才會throw給次近的catch

throw;上次接到啥就扔啥.要是沒接到就出錯!

一般只throw異常!

#include

#include

#include

#include

using

namespace std;

#define buffer_size 1024

//位元組數

#define element_size 1

class

beauty

~beauty()

beauty

(const beauty& other)};

//c++二進位制拷貝

void

cppcopybinary

(const

char

* dest,

const

char

* src)

//c二進位制拷貝

string ccopybinary1

(const

char

* dest,

const

char

* src)

fopen_s

(&destf_p, dest,

"wb");

// write binaryif(

!destf_p)

char buffer[buffer_size]

;int readlen =

fread_s

(buffer, buffer_size, element_size, buffer_size, srcf_p);if

(readlen <=0)

int writelen =

fwrite

(buffer, element_size, readlen, destf_p);if

(readlen != writelen)

fclose

(srcf_p)

;fclose

(destf_p)

;return

"成功!";}

void

ccopybinary2

(const

char

* dest,

const

char

* src)

fopen_s

(&destf_p, dest,

"wb");

if(!destf_p)

char buffer[buffer_size]

;int readlen =

fread_s

(buffer, buffer_size, element_size, buffer_size, srcf_p);if

(readlen <=0)

int writelen =

fwrite

(buffer, element_size, readlen, destf_p);if

(readlen != writelen)

fclose

(srcf_p)

;fclose

(destf_p)

;throw

"成功!";}

void

ccopybinary3

(const

char

* dest,

const

char

* src)

throw

(char

,int

)fopen_s

(&destf_p, dest,

"wb");

if(!destf_p)

char buffer[buffer_size]

;int readlen =

fread_s

(buffer, buffer_size, element_size, buffer_size, srcf_p);if

(readlen <=0)

int writelen =

fwrite

(buffer, element_size, readlen, destf_p);if

(readlen != writelen)

fclose

(srcf_p)

;fclose

(destf_p)

;throw0;

}//可以多次扔

void

twotimes()

catch(.

..)}

intmain()

catch

(const

char

* err)

cout <<

"throw new string/new char(char),形參string*,直接輸出:"

;//建立new異常元素

trycatch

(beauty& beauty)

catch

(string* err)

catch

(int n)

}catch

(string err)

return0;

}//最佳方式:int直接扔

//字串直接"***",const char*接 (也可string()初始化,string接;若new string初始化,string *接,需記得再delete err;)

//類直接beauty()初始化,beauty&接; (若new beauty則指標接,記得釋放)

三個函式的區別:

接"***",const char*接 (也可string()初始化,string接;若new string初始化,string *接,需記得再delete err;)

//類直接beauty()初始化,beauty&接; (若new beauty則指標接,記得釋放)

三個函式的區別:

![在這裡插入描述](

二進位制檔案

本質上是文字檔案是把檔案資訊先轉化成以字元編碼的ascii碼,再儲存ascii的二進位制 而二進位制檔案是直接把檔案資訊編碼成二進位制儲存。因此在讀取的時候要考慮記憶體中二進位制 應該怎麼樣解釋。二進位制檔案的讀取是是要告訴元素的型別 編碼方式 文字檔案則預設為char型別。文字檔案是一種特殊的二進...

二進位制檔案

二進位制檔案 也叫型別檔案 二進位制檔案是由一批同一型別的資料組成的乙個資料序列,就是說乙個具體的二進位制檔案只能存放同一種型別的資料。type tmember record name string 10 email string 20 posts longint end var members a...

二進位制檔案

二進位制檔案 也叫型別檔案 二進位制檔案是由一批同一型別的資料組成的乙個資料序列,就是說乙個具體的二進位制檔案只能存放同一種型別的資料。type tmember record name string 10 email string 20 posts longint end var members a...