C/C++檔案操作總結之檔案打開與讀寫
- 1 文本的打開與關閉
此系列隻是對于檔案打開讀寫操作上的一系列總結,對于更加深入的原理,以及C和C++的差別本人了解的不是很深入,文章中有問題的地方歡迎大家批評指正。
1 文本的打開與關閉
這裡的”打開“和”關閉“可調用标準庫stdio.h中的fopen和fclose。
FILE * fopen (char *filename , char *mode)
函數參數:
- filename:檔案名,包括路徑,如果不顯示含有路徑,則表示目前路徑。例如,“D:\\folder\\file.text”
- mode:檔案打開的模式,指出對該檔案可進行的操作。常見的打開模式如“r”表示隻讀,“w”表示隻寫,“rw”表示讀寫,“a”并表示追加寫入。 傳回值:打開成功,傳回該文進對應的FILE類型的指針;打開失敗則傳回NULL。故需定義FILE類型的指針變量,儲存該函數的傳回值。可根據該函數的傳回值判斷檔案是否打開成功。
關閉函數fclose()的原型如下。
int fclose(FILE *fp);
函數參數:
fp:已經打開的檔案指針
傳回值:0,正常關閉,否則傳回EOF(-1)。
順便一提:
C語言的檔案指針時用過FILE *fp這種形式進行定義的。
關于FILE結構有如下定義:
#ifndef _FILE_DEFINED
struct _iobuf {
char *_ptr; //檔案輸入的下一個位置
int _cnt; //目前緩沖區的相對位置
char *_base; //指基礎位置(即檔案的起始位置)
int _flag; //檔案标志
int _file; //檔案描述id
int _charbuf; //檢查緩沖區狀況,如果沒有緩沖區則不讀取
int _bufsiz; //檔案緩沖區大小
char *_tempfname;//臨時檔案名
};
typedef struct _iobuf FILE;
#define _FIEL_DEFINED
#endif
C程式用不同的FILE結構管理每個檔案。程式員可以使用檔案,但是不需要知道FILE結構的細節。實際上,FILE結構時間接地作業系統的檔案控制塊(FCB)來實作對檔案的操作的,如下圖: