CFile
//創(chuàng)建/打開文件
CFile file;
file.Open(_T("test.txt"),CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);
文件打開模式可組合使用,用“|”隔開,常用的有以下幾種:
CFile::modeCreate:以新建方式打開,如果文件不存在,新建;如果文件已存在,把該文件長度置零,即清除文件原有內(nèi)容。
CFile::modeNoTruncate:以追加方式打開,如果文件存在,打開并且不將文件長度置零,如果文件不存在,會拋出異常。一般與CFile::modeCreate一起使用,則文件不存在時(shí),新建一個(gè)文件;存在就進(jìn)行追加操作。
CFile::modeReadWrite:以讀寫方式打開文件。
CFile::modeRead:只讀。
CFile::modeWrite:只寫。
//寫入數(shù)據(jù)
CString strValue = "Hello World!";
file.Write(strValue,strValue.GetLength());
//追加數(shù)據(jù)
file.SeekToEnd(); //將指針移至文件末尾進(jìn)行追加
file.Write(strValue,strValue.GetLength());
//關(guān)閉文件
file.Close();
CStdioFile
CStdioFile是CFile的派生類,對文件進(jìn)行流式操作,對于文本文件的讀寫很有用處,可按行讀取寫入。
//寫入數(shù)據(jù)
CString strValue = "Hello World!";
file.WriteString(strValue);
//讀取數(shù)據(jù)
CString strRead;
file.ReadString(strRead);
當(dāng)文件存在多行數(shù)據(jù)需要逐行讀取時(shí),可用函數(shù)BOOL CStdioFile::ReadString(CString& rString),當(dāng)遇到"/n "時(shí)讀取截?cái)啵绻募醋x完,返回true,否則返回false。
//逐行讀取文件內(nèi)容,存入strRead
while(file.ReadString(strRead))
{
...;
}
各種關(guān)于文件的操作在程序設(shè)計(jì)中是十分常見,如果能對其各種操作都了如指掌,就可以根據(jù)實(shí)際情況找到最佳的解決方案,從而在較短的時(shí)間內(nèi)編寫出高效的代碼,因而熟練的掌握文件操作是十分重要的。本文將對Visual C++中有關(guān)文件操作進(jìn)行全面的介紹,并對在文件操作中經(jīng)常遇到的一些疑難問題進(jìn)行詳細(xì)的分析。
1.文件的查找
當(dāng)對一個(gè)文件操作時(shí),如果不知道該文件是否存在,就要首先進(jìn)行查找。MFC中有一個(gè)專門用來進(jìn)行文件查找的類CFileFind,使用它可以方便快捷地進(jìn)行文件的查找。下面這段代碼演示了這個(gè)類的最基本使用方法。
//對文件進(jìn)行寫操作
CFile mFile(_T("user.txt "), CFile::modeWrite|CFile::modeCreate);
mFile.Write(sRead,2);
mFile.Flush();
mFile.Close();
雖然這種方法最為基本,但是它的使用繁瑣,而且功能非常簡單。我向你推薦的是使用CArchive,它的使用方法簡單且功能十分強(qiáng)大。首先還是用CFile聲明一個(gè)對象,然后用這個(gè)對象的指針做參數(shù)聲明一個(gè)CArchive對象,你就可以非常方便地存儲各種復(fù)雜的數(shù)據(jù)類型了。它的使用方法見下例。
//對文件進(jìn)行寫操作
CString strTemp;
CFile mFile;
mFile.Open("d://dd//try.TRY",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
CArchive ar(&mFile,CArchive::store);
ar<<ar.Close();
mFile.Close();
//對文件進(jìn)行讀操作
CFile mFile;
if(mFile.Open("d://dd//try.TRY",CFile::modeRead)==0)
return;
CArchive ar(&mFile,CArchive::load);
ar>>strTemp;
ar.Close();
mFile.Close();
CArchive的 << 和>> 操作符用于簡單數(shù)據(jù)類型的讀寫,對于CObject派生類的對象的存取要使用ReadObject()和WriteObject()。使用CArchive的ReadClass()和WriteClass()還可以進(jìn)行類的讀寫,如:
//存儲CAboutDlg類
ar.WriteClass(RUNTIME_CLASS(CAboutDlg));
//讀取CAboutDlg類
CRuntimeClass* mRunClass=ar.ReadClass();
//使用CAboutDlg類
CObject* pObject=mRunClass->CreateObject();
((CDialog* )pObject)->DoModal();
雖然VC提供的文檔/視結(jié)構(gòu)中的文檔也可進(jìn)行這些操作,但是不容易理解、使用和管理,因此雖然很多VC入門的書上花費(fèi)大量篇幅講述文檔/視結(jié)構(gòu),但我建議你最好不要使用它的文檔。關(guān)于如何進(jìn)行文檔/視的分離有很多書介紹,包括非常著名的《Visual C++ 技術(shù)內(nèi)幕》。
如果你要進(jìn)行的文件操作只是簡單的讀寫整行的字符串,我建議你使用CStdioFile,用它來進(jìn)行此類操作非常方便,如下例。
1,判斷文件是否存在
access(filename,mode);
2,對于不同用途又不同的文件操作,其中API函數(shù)CreateFile()也是比較有用處理方式,對于巨型文件很合適的其他的樓上的大都說了,不重復(fù)了.
[1]顯示對話框,取得文件名
[2]打開文件
CFile file("C:/HELLO.TXT",CFile::modeRead);//只讀方式打開
//CFile::modeRead可改為 CFile::modeWrite(只寫),
//CFile::modeReadWrite(讀寫),CFile::modeCreate(新建)
例子:
[4]讀寫文件
讀文件:
char buffer[1000];
file.Read(buffer,1000);
寫文件:
CString string("自強(qiáng)不息");
file.Write(string,8);
[5]關(guān)閉文件
file.Close();
新聞熱點(diǎn)
疑難解答
圖片精選