程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> VC++ CArchive及簡單的文件操作方法,

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

編輯:C++入門知識

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


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,用它來進行此類操作非常方便,如下例。
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();

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved