CArchive 方法用於存取文件
我向你推薦的是使用CArchive,它的使用方法簡單且功能十分強大。首先還是用CFile聲明一個對象,然後用這個對象的指針做參數聲明一個CArchive對象,你就可以非常方便地存儲各種復雜的數據類型了。它的使用方法見下例。
//對文件進行寫操作 CString strTemp; CFile mFile; mFile.Open("d:\\dd\\try.TRY",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite); CArchive ar(&mFile,CArchive::store); ar<< strTemp; ar.Close(); mFile.Close(); //對文件進行讀操作 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的 << 和>> 操作符用於簡單數據類型的讀寫,對於CObject派生類的對象的存取要使用ReadObject()和WriteObject()。使用CArchive的ReadClass()和WriteClass()還可以進行類的讀寫,如:
//存儲CAboutDlg類 ar.WriteClass(RUNTIME_CLASS(CAboutDlg)); //讀取CAboutDlg類 CRuntimeClass* mRunClass=ar.ReadClass(); //使用CAboutDlg類 CObject* pObject=mRunClass->CreateObject(); ((CDialog* )pObject)->DoModal();雖然VC提供的文檔/視結構中的文檔也可進行這些操作,但是不容易理解、使用和管理,因此雖然很多VC入門的書上花費大量篇幅講述文檔/視結構,但我建議你最好不要使用它的文檔。關於如何進行文檔/視的分離有很多書介紹,包括非常著名的《Visual C++ 技術內幕》。
CStdioFile mFile; CFileException mExcept; mFile.Open( "d:\\temp\\aa.bat", CFile::modeWrite, &mExcept); CString string="I am a string."; mFile.WriteString(string); mFile.Close();
char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH]; GetTempPath(_MAX_PATH, szTempPath); GetTempFileName(szTempPath,_T ("my_"),0,szTempfile); CFile m_tempFile(szTempfile,CFile:: modeCreate|CFile:: modeWrite); char m_char='a'; m_tempFile.Write(&m_char,2); m_tempFile.Close();
_access(filename,mode);
CString FilePathName; CFileDialog dlg(TRUE);///TRUE為OPEN對話框,FALSE為S***E AS對話框 if (dlg.DoModal() == IDOK) FilePathName=dlg.GetPathName();