1. 程式人生 > >C檔案讀寫函式

C檔案讀寫函式

fopen()

函式原型 函式原型:FILE * fopen(const char * path, const char * mode);

FILE *fp ;
fp =  fopen("D:\\a.txt","r");  
\\是一種轉義字元,他表示一個\,就像\n表示回車一樣,即可用絕對路徑也可用相對路徑

mode:

字串 說明
r 以只讀方式開啟檔案,該檔案必須存在。
r+ 以讀/寫方式開啟檔案,該檔案必須存在。
rb+ 以讀/寫方式開啟一個二進位制檔案,只允許讀/寫資料。
rt+ 以讀/寫方式開啟一個文字檔案,允許讀和寫。
w 開啟只寫檔案,若檔案存在則長度清為 0,即該檔案內容消失,若不存在則建立該檔案。
w+ 開啟可讀/寫檔案,若檔案存在則檔案長度清為零,即該檔案內容會消失。若檔案不存在則建立該檔案。
a 以附加的方式開啟只寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留(EOF 符保留)。
a+ 以附加方式開啟可讀/寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,則寫入的資料會被加到檔案尾後,即檔案原先的內容會被保留(原來的 EOF 符不保留)。
wb 以只寫方式開啟或新建一個二進位制檔案,只允許寫資料。
wb+ 以讀/寫方式開啟或建立一個二進位制檔案,允許讀和寫。
wt+ 以讀/寫方式開啟或建立一個文字檔案,允許讀寫。
at+ 以讀/寫方式開啟一個文字檔案,允許讀或在文字末追加資料。
ab+ 以讀/寫方式開啟一個二進位制檔案,允許讀或在檔案末追加資料。

fopen_s()

函式原型:
errno_t fopen_s( FILE** pFile, const char filename, const char mode );
errno_t _wfopen_s( FILE
pFile, const wchar_t *filename, const wchar_t *mode );

errno_t是一種資料型別,實際上是一個整形,代表錯誤號碼,如果是0就代表沒有錯誤,其他代表丟擲一個錯誤。

char是8位字元型別,最多隻能包含256種字元,許多外文字符集所含的字元數目超過256個,char型無法表示。

wchar_t資料型別一般為16位或32位,但不同的C或C++庫有不同的規定,如GNU Libc規定wchar_t為32位,總之,wchar_t所能表示的字元數遠超char型。

int err = fopen_s(&fp, "D:\\a.txt", "r");

fread()

函式原型:
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ; 返回真實讀取的項數

引數1:buffer
用於接收資料的記憶體地址

引數2:size
要讀的每個資料項的位元組數,單位是位元組

引數3:count
要讀count個數據項,每個資料項size個位元組.

引數4:stream
輸入流

char buffer;
int size= fread(&buffer, sizeof(char), 1, fp);
while (size)
{
	cout << buffer;
	size = fread(&buffer, sizeof(char), 1, fp);
}

fclose()

函式原型: int fclose( FILE *fp );
如果流成功關閉,fclose 返回 0,否則返回EOF(-1);

fclose(fp);

fwrite()

函式原型
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
引數與fread一樣這裡buffer是寫入的內容

err = fopen_s(&fp, "D:\\a.txt", "a+");
buffer = 'e';
fwrite(&buffer,sizeof(char),1,fp);
fclose(fp);

附加一個

fseek()

函式原型
int fseek(FILE *stream, long offset, int fromwhere); 函式設定檔案指標stream的位置。

成功,返回0,失敗返回-1,並設定error的值,可以用perror()函式輸出錯誤。

引數1:stream為檔案指標

引數2:offset為偏移量,正數表示正向偏移,負數表示負向偏移

引數3:fromwhere設定從檔案的哪裡開始偏移
引數3選項:
0 : SEEK_SET: 檔案開頭
1 : SEEK_CUR: 當前位置
2 : SEEK_END: 檔案結尾

fseek(fp,100L,0);		把stream指標移動到離檔案開頭100位元組處;
fseek(fp,100L,1);		把stream指標移動到離檔案當前位置100位元組處;
fseek(fp,-100L,2);		把stream指標退回到離檔案結尾100位元組處。

偏移量後加 L,表示 long int 型。
其實,不加L,一般編譯器也都知道是 long 型