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 型