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