C MFC修行之路 1 檔案操作

2021-07-09 19:52:55 字數 4448 閱讀 4821

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

cstring strfiletitle;//

cfilefind finder; //檔案查詢類的例項

bool bworking = finder.findfile("c:\windows\sysbkup\*.cab");

while(bworking)

讓使用者選擇檔案進行開啟和儲存操作時,就要用到檔案開啟/儲存對話方塊。mfc的類cfiledialog用於實現這種功能。使用cfiledialog宣告乙個物件時,第乙個bool型引數用於指定檔案的開啟或儲存,當為true時將構造乙個檔案開啟對話方塊,為false時構造乙個檔案儲存對話方塊。

在構造cfiledialog物件時,如果在引數中指定了ofn_allowmultiselect風格,則在此對話方塊中可以進行多選操作。此時要重點注意為此cfiledialog物件的m_ofn.lpstrfile分配一塊記憶體,用於儲存多選操作所返回的所有檔案路徑名,如果不進行分配或分配的記憶體過小就會導致操作失敗。下面這段程式演示了檔案開啟對話方塊的使用方法。

cfiledialog mfiledlg(true,null,null,

ofn_hidereadonly|

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)

方法一:直接使用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

//***************對檔案進行讀操作********************===

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();

注意:文件/視結構中的文件也可進行這些操作,關於如何進行文件/檢視的分離有很多書介紹,包括非常著名的《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();

方法四:追加到原有txt檔案尾

mfile.open(temptxt,cfile::modecreate

|cfile::modewrite

|cfile::modenotruncate);

if(mfile==

null)

return

false;

mfile.seektoend();

mfile.writestring(s);

file.close();

臨時檔案的使用方法基本與常規檔案一樣,只是檔名應該呼叫函式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();

mfc中沒有提供直接進行這些操作的功能,因而要使用sdk。sdk中的檔案相關函式常用的有copyfile()、createdirectory()、deletefile()、movefile()。它們的用法很簡單,可參考msdn。

char szpath[max_path];     //存放選擇的目錄路徑 

cstring abspath;

zeromemory(szpath, sizeof(szpath));

browseinfo bi;

bi.hwndowner = m_hwnd;

bi.pidlroot = null;

bi.pszdisplayname = szpath;

cstring temp;

temp.format(_t("%s"), "請選擇工程目錄:");

bi.lpsztitle = _t(temp);

bi.ulflags = 0;

bi.lpfn = null;

bi.lparam = 0;

bi.iimage = 0;

lpitemidlist lp = shbrowseforfolder(&bi);//彈出選擇目錄對話方塊

if (lp && shgetpathfromidlist(lp, szpath))//目錄有效

else

//所選擇的目錄有效

}else

bool createdirectory(lpcstr path, null);

1 檔案測試 2 檔案操作

1 檔案測試函式 2 檔案操作 新建檔案 fopen filename,w 以 寫 的方式開啟乙個不存在的檔案,就會新建該檔案 檔案刪除 unlink 檔案複製 copy filename,aaa bb.txt 盡量使用 和相對路徑,因為linux只認 也沒有磁碟分割槽,而windows 和 都認 ...

Qt學習之路21 檔案操作

io操作的本質就是讀寫一段連續的儲存空間。qfile file qstring c users song8023 desktop test.txt 定義乙個檔案qfile類物件時需要指定路徑和名字,if file.open qiodevice writeonly qiodevice text 以只寫...

檔案操作《1》檔案的讀寫

檔案操作在c語言中是乙個不能忽略的知識點,學習檔案操作也可以解除大家對檔案的誤解,可能許多人會認為只有資料夾中的文字檔案,編譯c語言時的原始檔和標頭檔案才是檔案等,其實不能,計算機中的顯示器 滑鼠 鍵盤 印表機等都可以稱為檔案,沒想到吧,其中的鍵盤是標準輸入檔案,顯示器是標準輸出檔案 理解了檔案後我...