c c 檔案操作總結

2021-10-05 07:35:30 字數 3422 閱讀 5462

計算機在物理記憶體上面存放的都是二進位制,所以文字檔案和二進位制檔案的主要區別是在邏輯上的而不是物理上的。而從檔案的編碼方式來看,檔案可以分為文字檔案和二進位制檔案。文字檔案是基於字元編碼的檔案,常見的有ascii、unicode等,二進位制檔案是基於值編碼的檔案,可以看成是變長編碼,你可以根據自己的需要,決定多少個位元代表乙個值。

從檔案編碼的方式來看,檔案可分為ascii碼檔案和二進位製碼檔案兩種。

(1)ascii檔案也稱為文字檔案,這種檔案在磁碟中存放時每個字元對應乙個位元組,用於存放對應的ascii碼。例如,數5678的儲存形式為:

asc碼: 00110101 00110110 00110111 00111000

↓      ↓     ↓     ↓

十進位製碼: 5      6     7     8 共占用4個位元組。ascii碼檔案可在螢幕上按字元顯示, 例如源程式檔案就是ascii檔案,用dos命令type可顯示檔案的內容。 由於是按字元顯示,因此能讀懂檔案內容。

(2)二進位制檔案是按二進位制的編碼方式來存放檔案的。 例如, 數5678的儲存形式為: 00010110 00101110只佔二個位元組。二進位制檔案雖然也可在螢幕上顯示, 但其內容無法讀懂。c系統在處理這些檔案時,並不區分型別,都看成是字元流,按位元組進行處理。 輸入輸出字元流的開始和結束只由程式控制而不受物理符號(如回車符)的控制。 因此也把這種檔案稱作「流式檔案」。

fopen()函式

函式原型為:file *fopen(const char *filename, const char *mode);

fopen(檔案路徑,檔案使用方式);

fopen函式開啟filename指定的檔案,返回乙個指向file型別的指標,無論使用哪種方式,當開啟檔案時出現了錯誤,fopen函式都將返回null

fclose()函式

fclose(檔案指標);

若檔案關閉成功則返回0,否則返回非0

fread()函式

函式原型:unsigned int fread(void *buffer, unsigned int size, unsigned int count, file *fp);

函式功能:從fp所指的檔案中讀取資料塊並儲存到buffer所指向的記憶體中,buffer是待讀入資料塊儲存的起始位址,size是每個資料塊的大小(待讀入的每個資料塊的位元組數),

count是最多允許讀取的資料塊個數(每個資料塊size個位元組),函式返回的是實際讀到的資料塊個數

fwrite()函式

函式原型:unsigned int fwrite(const void *buffer, unsigned int size, unsigned int count, file *fp);

函式功能:將buffer指向的記憶體中的資料塊寫入fp所指的檔案,buffer是待輸出資料塊的起始位址,size是每個資料塊的大小(待輸出的每個資料塊的位元組數),

count是最多允許寫入的資料塊個數(每個資料塊size個位元組),函式返回的是實際寫入的資料塊個數

fgets()函式

函式原型:char *fgets(char *s,int n,file *fp);

函式功能:該函式從fp所指的檔案中讀取字串並在字串末尾新增『\0』,然後存入s,最多讀n-1個字元,當讀到回車換行符、到達檔案尾或讀滿n-1個字元時,就停止讀取

函式返回該字串的首位址,即指標s的值,讀取失敗返回空指標null

(與gets()不同的是,fgets()從指定的流讀取字串,讀到換行符時將換行符也作為字串的一部分讀到字串中來)

fputs()函式

函式原型:fputs(in_z const char * _str, inout file * _file);

str是要輸出的字串,fp是檔案指標,字串末尾』\0』不輸出

函式功能:將字串輸出到指標fp所指的檔案中

(與puts()不同的是,fputs()不會在寫入檔案的字串末尾加上換行符』\n』)

fgetc()函式

函式原型:int fgetc (file *fp);

函式功能:用於從乙個以唯讀或讀寫方式開啟的檔案上讀字元,從fp所值的檔案中讀取乙個字元,並將位置指標指向下乙個字元,若讀取成功,則返回該字元,

若讀取不成功則返回eof(eof是乙個符號常量,stdio.h中定義為-1)

fputc()函式

函式原型:int fputc(int c, file *fp);

fp是由函式fopen()返回的檔案指標,c是要輸出的字元(儘管c定義為int型,但只寫入低位元組)

函式功能:該函式的功能是將字元c寫到檔案指標fp所指的檔案上中,若寫入錯誤返回eof,否則返回字元c

ofstream 該資料型別表示輸出檔案流,用於建立檔案並向檔案寫入資訊。

ifstream 該資料型別表示輸入檔案流,用於從檔案讀取資訊。

fstream 該資料型別通常表示檔案流,且同時具有 ofstream 和 ifstream 兩種功能,這意味著它可以建立檔案,向檔案寫入資訊,從檔案讀取資訊。

要在 c++ 中進行檔案處理,必須在 c++ 源**檔案中包含標頭檔案 和

緩衝檔案作業系統:系統會自動的在記憶體區為每乙個正在使用的檔案開闢一塊緩衝區,緩衝區的大小一般由各個c的版本規定,一般的為512byte即0.5k大小。從此盤向記憶體讀資料時,則一次將一些資料從磁碟檔案送記憶體緩衝區(充滿緩衝區),然後再從緩衝區逐個將數送給接收變數(檔案描述符);從記憶體寫資料到磁碟檔案時,現將資料塞滿緩衝區,在一次性將資料從緩衝區送到磁碟檔案。用緩衝區可以一次讀入一批資料,或輸出一批資料,而不是執行一次輸入或輸出函式就去訪問一次磁碟,這樣做的目的是減少對磁碟的實際讀寫次數,因為每一次讀寫都要移動磁頭並尋找磁軌扇區,花費一定的時間。緩衝檔案系統是借助檔案結構體指標來對檔案進行管理,通過檔案指標來對檔案進行訪問,既可以讀寫字元、字串、格式化資料,也可以讀寫二進位制資料,緩衝檔案系統函式一般是由f開頭的函式,如fopen(),fwrite(),fread()。

非緩衝檔案系統:非緩衝檔案系統不會自動地設定緩衝區,需要使用者根據自己的需要去設定,在傳統的unix下,用緩衝檔案系統來處理文字檔案,用非緩衝檔案系統來處理二進位制檔案。非緩衝檔案系統依賴於作業系統,通過作業系統的功能對檔案進行讀寫,是系統級的輸入輸出,它不設檔案結構體指標,只能讀寫二進位制檔案,但效率高、速度快。

C C 檔案操作總結

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

C C 讀取檔案總結

c方式 include define f path d myfile file.dat char c intmain c 逐行讀取文字 ifstream file file.open strpath,ios in if file.is open return string strline while...

C C 檔案操作 2

ofstream fs binary ios binary ofstream fs character.txt int i 32765 fs 無論以二進位制檔案模式開啟還是以文字模式開啟,檔案中都是儲存著文字!似乎c c 中的binary 模式不起作用!後來查閱資料才知道 要想在c c 中將資料以二...