日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

剖析VC中的文件操作

發布時間:2025/3/15 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剖析VC中的文件操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

剖析VC中的文件操作

2002-8-4 17:33:29?? 燕山大學?? 聶棟棟?? 閱讀次數:?18539
各種關于文件的操作在程序設計中十分常見,如果能對這些操作都了如指掌,就可以根據實際情況找到最佳的解決方案,從而可以在較短的時間內編寫出高效的代碼。本文對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_OVERWRITEPROMPT?|?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。

總結

以上是生活随笔為你收集整理的剖析VC中的文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。