VC++ CArchive及簡單的文件操做方法

CArchive 方法用於存取文件 函數

  我向你推薦的是使用CArchive,它的使用方法簡單且功能十分強大。首先仍是用CFile聲明一個對象,而後用這個對象的指針作參數聲明一個CArchive對象,你就能夠很是方便地存儲各類複雜的數據類型了。它的使用方法見下例。
   spa

//對文件進行寫操做 
  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,用它來進行此類操做很是方便,以下例。
CStdioFile mFile; 
  CFileException mExcept; 
  mFile.Open( "d:\\temp\\aa.bat", CFile::modeWrite, &mExcept); 
  CString string="I am a string."; 
  mFile.WriteString(string); 
  mFile.Close();

 4.臨時文件的使用
  正規軟件常常用到臨時文件,你常常能夠會看到C:\Windows\Temp目錄下有大量的擴展名爲tmp的文件,這些就是程序運行是創建的臨時文件。臨時文件的使用方法基本與常規文件同樣,只是文件名應該調用函數GetTempFileName()得到。它的第一個參數是創建此臨時文件的路徑,第二個參數是創建臨時文件名的前綴,第四個參數用於獲得創建的臨時文件名。獲得此臨時文件名之後,你就能夠用它來創建並操做文件了,如:
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();

  5.文件的複製、刪除等
  MFC中沒有提供直接進行這些操做的功能,於是要使用SDK。SDK中的文件相關函數經常使用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。它們的用法很簡單,可參考MSDN。
1,判斷文件是否存在
_access(filename,mode);

2,對於不一樣用途又不一樣的文件操做,其中API函數CreateFile()也是比較有用處理方式,對於巨型文件很合適的其餘的樓上的大都說了,不重複了.
[1]顯示對話框,取得文件名
CString FilePathName;
CFileDialog dlg(TRUE);///TRUE爲OPEN對話框,FALSE爲S***E AS對話框
if (dlg.DoModal() == IDOK)
FilePathName=dlg.GetPathName();

相關信息:CFileDialog 用於取文件名的幾個成員函數:
假如選擇的文件是C:\WINDOWS\TEST.EXE
則(1) GetPathName();取文件名全稱,包括完整路徑。取回C:\WINDOWS\TEST.EXE(2)GetFileTitle();取文件全名:TEST.EXE (3)GetFileName();取回TEST (4)GetFileExt();取擴展名EXE [2]打開文件 CFile file("C:\HELLO.TXT",CFile::modeRead);//只讀方式打開 //CFile::modeRead可改成 CFile::modeWrite(只寫), //CFile::modeReadWrite(讀寫),CFile::modeCreate(新建) 例子: { CFile file; file.Open("C:\HELLO.TXT",CFile::modeCreate|Cfile::modeWrite); . . . } [3]移動文件指針 file.Seek(100,CFile::begin);///從文件頭開始往下移動100字節 file.Seek(-50,CFile::end);///從文件末尾往上移動50字節 file.Seek(-30,CFile::current);///從當前位置往上移動30字節 file.SeekToBegin();///移到文件頭 file.SeekToEnd();///移到文件尾 [4]讀寫文件 讀文件: char buffer[1000]; file.Read(buffer,1000); 寫文件: CString string("自強不息"); file.Write(string,8); [5]關閉文件 file.Close();
相關文章
相關標籤/搜索