成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

Visual C++程序設計中的文件操作

2010-08-28 10:45:15來源:西部e網作者:

    各種關于文件的操作在程序設計中十分常見,如果能對這些操作都了如指掌,就可以根據實際情況找到最佳的解決方案,從而可以在較短的時間內編寫出高效的代碼。本文對Visual C++中有關文件操作進行了全面的介紹,并對在文件操作中經常遇到的一些疑難問題進行了詳細分析。

   1. 文件的查找

  當對一個文件操作時,如果不知道該文件是否存在,就要首先進行查找。MFC中有一個專門用來進行文件查找的類“CFileFind”,使用它可以方便快捷地進行文件的查找。下面這段代碼演示了這個類的最基本使用方法。

CString strFileTitle;
CFileFind finder;
BOOL bWorking = finder.FindFile(“C:\\windows\\sysbkup\\*.cab”);
while(bWorking)
{
 bWorking=finder.FindNextFile();
 strFileTitle=finder.GetFileTitle();
}

  2. 文件的打開/保存對話框

  讓用戶選擇文件進行打開和存儲操作時,就要用到文件打開/保存對話框。MFC的類“CFileDialog”用于實現這種功能。使用“CFileDialog”聲明一個對象時,第一個BOOL型參數用于指定文件的打開或保存,當為TRUE時將構造一個文件打開對話框,為FALSE時構造一個文件保存對話框。

  在構造“CFileDialog”對象時,如果在參數中指定了“OFN_ALLOWMULTISELECT”風格,則在此對話框中可以進行多選操作。此時要重點注意為此“CFileDialog”對象的“m_ofn.lpstrFile”分配一塊內存,用于存儲多選操作所返回的所有文件路徑名,如果不進行分配或分配的內存過小就會導致操作失敗。下面這段程序演示了文件打開對話框的使用方法。

CFileDialog mFileDlg(TRUE, NULL,NULL, OFN_HIDEREADONLY|OFN_OVER
WRITEPROMPT|OFN_ALLOWMULTISELECT,“All Files (*.*)|*.*| |”, AfxGetMainWnd());
CString str(“ ”, 10000);
mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000);
str.ReleaseBuffer();
POSITION mPos=mFileDlg.GetStartPosition();
CString pathName(“ ”, 128);
CFileStatus status;
while(mPos!=NULL)
{
 pathName=mFileDlg.GetNextPathName(mPos);
 CFile::GetStatus(pathName, status);
}

   3. 文件的讀寫

  文件的讀寫非常重要,下面將重點進行介紹。文件讀寫最普通的方法是直接使用“CFile”類進行,如文件的讀寫可以使用下面的方法:

//對文件進行讀操作
char sRead[2];
CFile mFile(_T(“user.txt”),CFile::modeRead);
if(mFile.GetLength()<2)
 return;
mFile.Read(sRead,2);
mFile.Close();
//對文件進行寫操作
CFile mFile(_T(“user.txt”), CFile::modeWrite|CFile::modeCreate);
mFile.Write(sRead,2);
mFile.Flush();
mFile.Close();

  雖然這種方法最為基本,但是它使用煩瑣,而且功能非常簡單。這里推薦的是使用“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.Read
Class();
//使用CAboutDlg類
CObject* pObject=mRunClass->CreateObject();
((CDialog* )pObject)->DoModal();

  雖然VC提供的文檔/視結構中的文檔也可進行這些操作,但是不容易理解、使用和管理,如果要進行的文件操作只是簡單的讀寫整行的字符串,建議使用“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。
關鍵詞:VisualC++

贊助商鏈接:

主站蜘蛛池模板: 湖口县| 永吉县| 九台市| 新巴尔虎右旗| 万山特区| 綦江县| 七台河市| 西充县| 若尔盖县| 民丰县| 治县。| 安多县| 福清市| 桦南县| 吴忠市| 合肥市| 临海市| 阜南县| 杭锦旗| 丰原市| 建宁县| 大城县| 图片| 望都县| 阿巴嘎旗| 延川县| 民和| 鄂托克旗| 浦江县| 茂名市| 古蔺县| 威信县| 仙桃市| 平湖市| 吉木乃县| 屏南县| 百色市| 剑川县| 巴彦县| 湘潭市| 青岛市|