CFile是MFC文件類的基類,它直接提供非緩沖的二進制磁盤輸入/輸出設備,并直接地通過派生類支持文本文件和內存文件。CFile與CArchive類共同使用,支持MFC對象的串行化。
該類有三種常見的構造函數,其中一種聲明形式如下:
CFile(LPCTSTR lpszFileName,UINT nOpenFlags);參數:
lpszFileName是指定的文件名稱,可以是相對路徑和決定路徑;
nOpenFlags是指定文件的操作標志,常見有以下幾種,:
CFile::modeCreate 文件已經存在,將它的長度截斷為0; CFile::modeRead 只讀 CFile::modeReadWrite 可讀寫CFile::modeWrite 只寫操作示例
我們創建一個單文檔MFC工程,命名為File;并在主菜單中增加File的菜單項,WriteFile和ReadFile是其子菜單,其ID分別是IDM_WRITEFILE和IDM_READFILE,這兩個子菜單時非Popup類型,如下圖所示:
我們在View類中增加這兩個的菜單響應函數,其函數分別命名為OnWriteFile和OnReadFile;
OnWriteFile消息響應函數:
void CFileView::OnWriteFile(){ // TODO: 在此添加命令處理程序代碼 CFile File("test.txt",CFile::modeCreate|CFile::modeReadWrite); char szBufData[100] = {"hello Word!"}; //寫入文件內容,不包含/0 File.Write(szBufData, strlen(szBufData)); //立即寫入,不緩沖 File.Flush(); //文件操作結束關閉 File.Close();}OnReadFile消息響應函數:void CFileView::OnReadFile(){ // TODO: 在此添加命令處理程序代碼 CFile File; CFileException e; TCHAR* pszFileName = _T("test.txt"); //構造文件,同時增加異常處理 if(!File.Open(pszFileName, CFile::modeRead,&e)) { CString strErr; strErr.Format(_T("File could not be opened %d/n"), e.m_cause); MessageBox(strErr); } //創建指定大小的Buffer DWORD dwFileLenth = (DWORD)File.GetLength(); //初始化buffer, 增加一個/0空間 char *pBuf = new char[dwFileLenth + 1]; memset(pBuf, 0, dwFileLenth + 1); if (pBuf != NULL) { //讀取文件內容 File.Read(pBuf,dwFileLenth); File.Close(); //顯示文件內容 MessageBox(pBuf); //刪除bufer,避免內存泄漏 delete[] pBuf; pBuf = NULL; }}OnWriteFile運行結果:工程目錄下出現test.txt文件,其內容是“hello word!”;
OnReadFile運行結果:
彈出Messagebox對話框,其內容是“hello word!”;
成員函數
數據成員
m_hFile | 常包含操作系統文件句柄 |
CFile | 從一個路徑或文件句柄構造一個CFile對象 |
Abort | 不管任何警告和錯誤,關閉一個文件 |
Duplicate | 構造一個基于該文件的副本 |
Open | 帶錯誤檢驗選項,安全打開一個文件 |
Close | 關閉文件,刪除對象 |
Read | 從文件的當前位置讀數據 |
ReadHuge | 可從文件的當前位置讀取大于64K數據,在32位編程中廢棄了,見Read |
Write | 將文件數據寫入當前文件位置 |
WriteHuge | 可將文件的大于64K數據寫到當前文件位置,在32位編程中廢棄了,見Write |
Flush | 溢去未被寫入的任何數據 |
Seek | 定位于當前文件指針 |
SeekToBegin | 定位當前文件指針到文件開頭 |
SeekToEnd | 定位當前文件指針到文件尾 |
GetLength | 獲取文件長度 |
SetLength | 改變文件長度 |
LockRange | 在文件中封鎖一定范圍內的字節 |
UnlockRange | 解鎖一定范圍內的字節 |
GetPosition | 獲取當前文件指針 |
GetStatus | 獲取打開文件的狀態 |
GetFileName | 獲取被選文件的文件名 |
GetFileTitle | 獲取被選文件的標題 |
GetFilePath | 獲取被選文件的完整路徑 |
SetFilePath | 設置被選文件的完整路徑 |
Rename | 改名指定文件(靜態函數) |
Remove | 刪除指定文件(靜態函數) |
GetStatus | 獲取指定文件的狀態(靜態,虛函數) |
SetStatus | 設置指定文件的狀態(靜態,虛函數) |
|
新聞熱點
疑難解答