VC的檔案操作和檔案對話方塊使用

2021-05-27 00:09:30 字數 2875 閱讀 8694

各種關於檔案的操作在程式設計中是十分常見,因而熟練的掌握檔案操作是十分重要的。

(1)檔案的查詢

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

cstring strfiletitle;

cfilefind finder;

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

while(bworking)

(2)檔案對話方塊的使用

讓使用者選擇檔案進行開啟和儲存操作時,就要用到檔案開啟/儲存對話方塊,mfc的類cfiledialog用於實現這種功能。首先構造乙個物件並提供相應的引數,建構函式原型如下:

cfiledialog::cfiledialog(

bool bopenfiledialog, //為true則顯示開啟對話方塊,為false則顯示儲存對話檔案對話方塊

lpctstr lpszdefext = null, //預設的副檔名

lpctstr lpszfilename = null, //預設的檔名

dword dwflags = ofn_hidereadonly | ofn_overwriteprompt, //設定風格

lpctstr lpszfilter = null, //列出可供選擇的檔案型別和相應的副檔名

cwnd* pparentwnd = null //父視窗控制代碼指標

);該類還有一些經常用到的成員函式。建立檔案對話方塊可以使用domodal(),在返回ok後可以利用下面的函式得到使用者選擇:

cstring cfiledialog::getpathname( ) 得到完整的檔名,包括目錄名和副檔名如:c:/test/test1.txt

cstring cfiledialog::getfilename( ) 得到完整的檔名,包括副檔名如:test1.txt

cstring cfiledialog::getextname( ) 得到完整的副檔名,如:txt

cstring cfiledialog::getfiletitle ( ) 得到完整的檔名,不包括目錄名和副檔名如:test1

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

(4)大於64k檔案的讀寫

vc中訪問大於65535位元組的緩衝區需要huge型指標,而在cfile類中,使用的是far型的指標。由於far型指標不具有跨段定址的能力,因此限制了一次檔案讀寫的長度小於65535位元組。在mfc的cfile類中提供了兩個未載入文件的函式,函式原型如下:

dword cfile::readhuge(void far *lpbuffer,dword dwcount);

void cfile::writehuge(const void far*lpbuffer,dword dwcount);

在這兩個函式內部使用的都是huge型指標來對傳遞的緩衝區進行定址,因此可以讀寫大於65535位元組的巨型資料。

對於readhuge()和writehuge()函式需要的巨型緩衝區可以使gobalalloc()來建立。例項:

cstring namel("data1.dat"); 

cstring name2("data2.dat");

cfile myfilel(namel,cfile::moderead);

cfile myfile2(name2,cfile::modecreate|cfile::modewrite);

dword length=myfile1.getlength();

void far *p=globalalloc(0,length);

if(p=null)

myfile1.readhuge(p,length);

myfile2.writehuge(p,length);

myfile1.close();

myfile2.close();

afxmessagebox("file copy succeed!"); 

}  (5)檔案的複製、刪除等

mfc中沒有提供直接進行這些操作的功能,因而要使用sdk。sdk中的檔案相關函式常用的有copyfile()、createdirectory()、deletefile()、movefile()。

(6)綜合例項

結合以上檔案和檔案對話方塊的,舉乙個開啟並載入檔案的操作例項。

cfile filetemp;      //檔案

cfiledialog binfile(

true,

"file",

"*.bin",

ofn_hidereadonly,

null,

null);       //建立乙個檔案對話方塊

if (binfile.domodal() == idok)   //如果點ok確認

}

VC用對話方塊開啟檔案

void cmainframe onfileimport if m strcurrentdirpath.getlength strdir.getlength m strcurrentdirpath strdir position npos dlg.getstartposition cmediator...

vc 建立 瀏覽檔案對話方塊

用到的結構和函式有 browseinfo itemidlist shbrowseforfolder shgetpathfromidlist。上面的m strpath 是定義的cstring型別的成員變數 就是得到的資料夾路徑。注 對於 bif newdialogstyle未定義的情況,在該檔案頭部加...

VC 拖拽檔案到對話方塊

vs2012 在文件檢視結構中通過使用dragacceptfiles函式可以使程式接收拖拽檔案,在對話方塊中也可以新增wm dropfiles訊息的對映函式來使程式接收拖拽檔案。程式執行效果如圖所示。本例項的實現主要使用dragqueryfile函式。該函式用於獲取拖拽檔案的檔名稱。基本格式如下 d...