C C 檔案操作 2

2021-06-05 20:31:52 字數 2463 閱讀 5526

ofstream fs("binary",ios::binary);

//ofstream fs("character.txt");

int i = 32765;

fs<

無論以二進位制檔案模式開啟還是以文字模式開啟,檔案中都是儲存著文字!似乎c/c++中的binary 模式不起作用!?!

後來查閱資料才知道:要想在c/c++中將資料以二進位制形式

儲存檔案

,與你開啟檔案時的模式沒有關係,關鍵取決於你呼叫哪個

函式往檔案裡寫東西!!但是

對於開啟檔案,

或者說對於輸入而言,你開啟檔案的模式和你呼叫的函式應該都有關係。

只有使用fwrite 和fs.write()函式才能以二進位制形式輸出到檔案中,呼叫puts、fprintf、《等函式輸出的

都是ascii 文字,尤其需要注意的是類似於上面**段中那樣,在c++中,即使你用fs《以文字模式開啟乙個檔案,假如用fwrite 函式輸出的話,檔案中仍然是二進位制格式。

此外,要注意,不能用》來讀取以二進位制檔案格式儲存的整數!(注:中午我試過了,不行!這再次證明》只能讀入文字格式的數字)

下面這段話可能有問題:需要驗證!!!!!!

(補注:11:47am 我後來又想,所有上面的這些東西可以歸結成一句話:你以什麼模式開啟檔案根本不重要,因為你既改變不

了檔案本身的內容,也改變不了c/c++中系統函式的工作方式,所以在程式設計的時候,你只要關心這個檔案裡的資料內容本身是二進位制格式還是文字格式就好了!如果內容是文字格式的,你就呼叫文字格式那一套函式,比如puts,gets,fscanf,fprintf,<<,>>等,如果內容是二進位制格式的,你就呼叫二進位制格式那一套函式,比如fread,fwrite,ifstream.read(),ofstream.write()等。 只要保持檔案內容與處理函式相對應相一致就可以了,別管它用什麼模式開啟檔案!! 假如你用《向乙個二進位制檔案中輸入乙個整數,那麼其實裡面儲存的是文字格式的資料,那麼你就照樣可以以二進位制模式開啟它,然後用》來讀取這個整數。相反,如果你的二進位制檔案裡面是乙個以二進位制形式儲存的整數,那你肯定不能用》來讀取裡面的整數了!!

否則就不能正確建立檔案。

2、寫檔案。

先進性寫檔案的操作否則讀乙個空檔案是沒有意義的。

既然是寫二進位制檔案可以向檔案中寫入乙個整形值。寫二進位制字元只能使用write 函式。

但是write 函式的原形是write(const char * ch, int size)。第乙個引數是char *型別,所以需要把將要寫入

檔案的int 型別轉換成char *型別。這裡的轉換困擾了我好幾天,不過終於弄明白了。**如下。

int temp;

file.write((char *)(&temp),sizeof(temp));

3、讀檔案。

可以寫檔案了,讀檔案就好辦多了。讀檔案需要用到read 函式。其引數和write 大致相同,read(const char * ch, int size)。

把內容讀到int 型別變數中同樣涉及到乙個型別轉換的問題。和寫檔案一樣。

int readint;

file.read((char *)(&readint),sizeof(readint));

這樣檔案中的int 值就讀入到int 型變數readint 中了。

4、檔案指標。

在檔案的讀寫過程中往往需要對檔案進行選擇性讀取。所以需要進行檔案指標的移動。這是需要用到seekg 和seekp 函式。

在fstream 類中有兩個檔案指標,乙個是讀取檔案的指標,乙個是寫檔案的指標分別用tellg 和tellp 檔案來取得指標的位置。

同樣seekg 和seekp 兩個函式分別是對這兩個指標進行移動的函式。這兩個函式的引數都是一樣的。

先對幾個列舉型別進行一下說明:

ios_base::beg ——檔案開始位置

ios_base::cur ——檔案當前位置

ios_base::end ——檔案末尾位置

下面以seekg 為例說明一下指標移動的方法:

file.seekg(3) ——指標移動到第三個字元的位置

file.seekg(ios_base::beg) ——指標移動到檔案開頭

file.seekg(ios_base::end) ——指標移動到檔案末尾

file.seekg(-3,ios_base::cur) ——指標當前位置向前移動三個字元

file.seekg(3,ios_base::cur) ——指標當前位置向後移動三個字元

file.seekg(3,file.tellg()) ——指標當前位置向後移動三個字元

file.seekg(file.tellg()+3) ——指標當前位置向後移動三個字元

5、對檔案操作完畢後別忘了關閉檔案。

file.close();

以上5 個步驟就完成了對檔案的讀寫操作。文字檔案的操作是相同的,比二進位制檔案還要簡單。

C C 中的檔案操作 2

c 檔案操作。c 中引入了stream,相關的標頭檔案,支援檔案輸入與輸出,還有兩個和,分別支援檔案讀入和寫入。內容的讀取與寫入 c 引入了流操作,流操作符 和 用來從檔案讀取內容或把內容寫入檔案。istream operator type val 與fscanf對應,格式化的讀取內容,格式由值的t...

C C 檔案操作總結

c檔案操作 相關函式 file fopen const char path,const char mode r 開啟唯讀檔案,r 開啟可讀寫檔案 可覆蓋 該檔案必須存在 w 開啟只寫檔案,w 開啟可讀寫檔案 絕對覆蓋清空,相當於新檔案 若檔案不存在則建立該檔案 a 開啟只寫檔案,末尾追加,若檔案不存...

C C 檔案流操作

c 檔案流操作 include using namespace std int main 成員變數 全稱說明 ininput 讀out output 寫binary binary 二進位制檔案操作 ateat end 返回檔案尾端的位置 從檔案末尾追加內容 trunc truncate 銷毀原始檔,...