VC 檔案操作大全,開啟,儲存,複製,刪除,查詢等

2021-09-30 03:22:13 字數 3802 閱讀 7077

各種關於檔案的操作在程式設計中十分常見,如果能對這些操作都瞭如指掌,就可以根據實際情況找到最佳的解決方案,從而可以在較短的時間內編寫出高效的**。本文對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);

armfile.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開啟檔案和儲存檔案

開啟檔案 cfiledialog dlg true,null,null,ofn hidereadonly ofn overwriteprompt,all files txt txt afxgetmainwnd if dlg.domodal idok return 獲取檔案的絕對路徑 sfilenam...

檔案操作(複製 刪除 修改)

void readfile void filebasic else void fileoperator 建立檔案,並新增內容 status manager createfileatpath f1 contents data attributes nil if status if manager fi...

java檔案複製,刪除基本操作

public static boolean deletedirectory string dir file dirfile newfile dir 如果dir對應的檔案不存在,或者不是乙個目錄,則退出 if dirfile.exists dirfile.isdirectory boolean fla...