剖析VC中的檔案操作

2021-04-08 18:46:41 字數 3690 閱讀 4415

■ 燕山大學 聶棟棟

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

1. 檔案的查詢

當對乙個檔案操作時,如果不知道該檔案是否存在,就要首先進行查詢。mfc中有乙個專門用來進行檔案查詢的類「cfilefind」,使用它可以方便快捷地進行檔案的查詢。下面這段**演示了這個類的最基本使用方法。

cstring strfiletitle;

cfilefind finder;

bool bworking = finder.findfile(「c://windows//sysbkup//*.cab」);

while(bworking)

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)

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<

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中的檔案操作

剖析vc中的檔案操作 2002 8 4 17 33 29 燕山大學 聶棟棟 閱讀次數 18539 各種關於檔案的操作在程式設計中十分常見,如果能對這些操作都瞭如指掌,就可以根據實際情況找到最佳的解決方案,從而可以在較短的時間內編寫出高效的 本文對visual c 中有關檔案操作進行了全面的介紹,並對...

VC學習資料收集(5) 剖析VC中的檔案操作

剖析vc中的檔案操作 2002 8 4 17 33 29 燕山大學 聶棟棟 閱讀次數 18285 各種關於檔案的操作在程式設計中十分常見,如果能對這些操作都瞭如指掌,就可以根據實際情況找到最佳的解決方案,從而可以在較短的時間內編寫出高效的 本文對visual c 中有關檔案操作進行了全面的介紹,並對...

VC中的檔案操作 CFILE

各種關於檔案的操作在程式設計中是十分常見,如果能對其各種操作都瞭如指掌,就可以根據實際情況找到最佳的解決方案,從而在較短的時間內編寫出高效的 因而熟練的掌握檔案操作是十分重要的。本文將對visual c 中有關檔案操作進行全面的介紹,並對在檔案操作中經常遇到的一些疑難問題進行詳細的分析。1 檔案的查...