簡介
在MFC裡面,打開一個檔案最常用的方法分為以下兩步:
1.創建一個用於打開檔案的對象,通常都是聲明一個CFile或者一個CFile派生類的對象
2.調用該CFile對象的Open方法,並提供一個檔案路徑和打開方式作為Open方法的參數
Open函式的原型如下:
virtual BOOL Open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL );
如果你想讀一個檔案,就用 CFile::modeRead作為第二個參數,同時 CFile::modeCreate代表創建一個檔案。
參數二: nOpenFlags可組合為以下值:
CFile::modeCreate 創建一個新的檔案,如果檔案存在將檔案截取成長度為0。 ·
CFile::modeNoTruncate 此標誌總是與modeCreate 配合使用,如果檔案存在,不將檔案截取成長度為0;如果檔案不存在即創建新檔案。這個功能往往很好用,比如說,當你需要打開一個設定檔案,但是你並不清楚這個檔案是否已經存在。
CFile::modeRead 唯讀方式打開。
· CFile::modeReadWrite 讀寫方式打開。. ·
CFile::modeWrite 只寫方式打開。 ·
CFile::modeNoInherit 阻止這個檔案被子進程繼承。 ·
CFile::shareDenyNone 打開這個檔案同時允許其它進程讀寫這個檔案。如果檔案被其它進程以兼容的模式打開,這時create操作會失敗。 ·
CFile::shareDenyRead 打開檔案拒絕其它任何進程讀這個檔案。如果檔案被其它進程用compatibility模式或者是讀方式打開,create操作失敗。. ·
CFile::shareDenyWrite 打開檔案拒絕其它任何進程寫這個檔案。如果檔案被其它進程用compatibility模式或者是寫方式打開,create操作失敗。 ·
CFile::shareExclusive 以獨占方式打開這個檔案,不允許其它進程讀寫這個檔案。如果檔案已經在其它程式或當前程式以其他方式打開來進行讀寫,將返回失敗。 ·
CFile::shareCompat 這個標誌在32位的MFC中無效。 ·
CFile::typeText 設定成對回車換行對有特殊處理的文本模式(僅用在派生類中)。 ·
CFile::typeBinary 設定二進制模式(僅用在派生類中) 。
舉例
參照下面的例子:
VC++:
TCHAR* pszFileName = _T("c:\\test\\myfile.dat");
CFile myFile;
CFileException fileException;
if ( !myFile.Open( pszFileName, CFile::modeCreate | CFile::modeReadWrite, &fileException ) )
{
TRACE( _T("Can't open file %s, error = %u\n"),
pszFileName, fileException.m_cause );
}
大家常用的從檔案中讀寫字元串的類CStdioFile就是從CFile派生出的,因此CStdioFile類的對象也可以直接調用Open方法來打開一個對象,參看以下例子:
CString csExt;
CStdioFile Rfile(_T("C:\\myfiles\\myfile1.txt"),CFile::modeRead); //定義並初始化一個CStdioFile類的對Rfile
//一行一行的讀入字元串
while(Rfile.ReadString(csExt))
{
TRACE(_T("%s\n"),csExt);
}
Rfile.Close();
返回值
成功返回非0值,否則返回0。只有返回值為0時,pError參數才有意義。