12.2.1 文件的打開
FILE *fopen( "路徑+文件名","讀寫模式");
FILE *fopen(const char *filename, const char *mode);
讀寫模式:(1)r -- 用於讀 (2)w -- 用於寫 (3)a -- 用於寫,且文件必須存在
12.2.2 文件的寫入
fwrite("寫入的內容",每項字節數,長度,寫入的文件的FILE指針);
size_t fwrite(const void *buffer,size_t size,size_t count,FILE *stream);
另外,strlen()函數可以獲得字符串長度。
12.2.3 文件的關閉
fclose(FILE類指針);
fclose(FILE *pFile)
文件關閉後,寫在文件緩沖區的內容才正式寫入到文件中。
12.2.4 fflush函數
fflush()是將緩沖區的數據馬上寫入文件中。即使不關閉文件,也能將修改的內容寫入文件中。
12.2.5 文件指針定位
fseek(FILE類指針,偏移量,起始位置)
int fseek( FILE *stream, long offset, int origin );
起始位置:
SEEK_CUR: 當前位置
SEEK_END: 結尾處
SEEK_SET: 開頭處
12.2.6 文件的讀取
fread("存放讀取信息的字符串",每項字節數,長度,讀入的文件的FILE指針);
size_t fread(void *buffer,size_t size,size_t count,FILE *stream);
其中,第壹個參數可以是字符數組的名稱。比如:
char ch[100];
fread(ch,1,100,pFile);
#字符數組與字符串的關系
當字符數組的最後添加壹個'/0'後,就相當於字符串CString。使用字符數組名跟使用CString是壹樣的。
用字符數組接受文件字符,並把字符數組變成字符串格式的方法有三種:(即往字符數組的最後添加壹個'/0')
(1)計算好,直接在最後添加'/0'
(2)使用memset()函數將字符數組全部置0,然後保證最後留壹個位置。
(3)先獲取文件長度:可以用fseek移動至文件末尾,然後用ftell獲得文件當前位置,即文件長度。
然後直接以長度為索引,將數組的最後壹個字符置為0。
12.2.7 二進制文件和文本文件
二進制文件和文本文件其實內部都是由二進制數據組成,只不過文本文件多了回車(0D)和換行
(0A),可以以文本方式打開而已。
12.2.8 文本方式和二進制方式
以文本方式 寫入 數據時,遇 “回車” 變 “回車-換行”。
以文本方式 讀取 數據時,遇 “回車-換行”變 “回車”。
以二進制方式讀取或寫入數據,都保持原格式。
12.3 C++對文件操作的支持
C++語言中,有數據流類支持文件的讀寫,但使用得比較少。
讀文件,可以使用ofstream類。
寫文件,可以使用ifstream類。
12.4 Win32 API對文件操作的支持
WIN32API提供了壹些與文件操作相關的功能很強大的函數。
12.4.1 文件的創建和打開 CreateFile()
12.4.2 文件的寫入 WriteFile()
12.4.3 文件的讀取 ReadFile()
12.5 MFC對文件操作的支持
涉及MFC編程的話,最好使用CFile對文件進行操作。
創建CFile文件:
CFile(文件路徑+文件名,文件打開標識)
CFile(LPCSTR lpszFileName,UINT nOpenFlags)
nOpenFlags參數取值:
modeCreate, modeRead, modeWrite, modeReadWrite, typeText, typeBinary
12.5.1 文件的寫入
file.Write()
12.5.2 文件的讀取
file.Read()
file.Close()
12.5.3 CFileDialog類
1.創建“另存為”對話框
CFileDialog fileDlg(FALSE);
fileDlg.DoModal();
2.創建“打開”對話框
CFileDialog fileDlg(TRUE);
fileDlg.DoModal();
3.改變對話框標題
fileDlg.m_ofn.lpstrTitle
4.設置過濾器
fileDlg.m_ofn.lpstrFilter
5.設置默認擴展名
fileDlg.m_ofn.lpstrDefExt