各種關於檔案的操作在程式設計中是十分常見,因而熟練的掌握檔案操作是十分重要的。
(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 succeed!");
} (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...