檔案(檔案夾)相關操作.以下各種讨論基于windows+vc7.0開發環境.
實作檔案(檔案夾)操作的方式和函數多種多樣,在這裡我們隻是很淺顯讨論其中的一兩中方法的應用.如果你想了解更多的請參考你編譯系統的的幫助檔案.也可以和我讨論:
為了更好的對檔案(檔案夾)進行操作,我們先講解一些基本知識.最後我們将實作一個基于我們自己方法的檔案(檔案夾)create,copy,delete等操作的類.,如果你對檔案(檔案夾)操作已經非常熟悉,可以跳過前邊部分;在這個過程中,我們分别用api方式,和用c/c++自身附帶的檔案操作方式進行檔案操作.
1:查找一個檔案是否存在;
在打開一個檔案前,判斷一個檔案是否存在很重要.我們可以通過cfilefind類來查找指定目錄的下的檔案是否存在,我們可以借助mfc,使用windows api函數.
cfilefind find;// 定義find對象.
bool bstate =find.findfile(_t("c://temp/a.txt"));// 輸入要查找的檔案名
if(bstate)
{
afxmessagebox(_t("找到檔案"));
// 找到檔案相應處理
}
else
afxmessagebox(_t("沒有找到檔案是否建立"));
// 是否建立檔案
這樣我們就可以判斷一個檔案是否存在了.
你也可以用pathfileexists()函數判斷檔案是否存在,需要包括#include <shlwapi.h>庫檔案
2:建立,複制,删除一個檔案.
複制,删除一個檔案我們可以使用windows api函數來完成,我們分别來實作.
請記住一點我們在操作檔案時,不能對檔案目錄進行建立.舉個例子說明:
如果我們目前目錄是c:/temp/在這個目錄下沒有存在c:/temp/temp,如果我們建立,複制,删除一個檔案c:/temp/temp/a.txt都将失敗.也正是因為這一點,我才覺的有必要寫這片文章.
1)檔案建立
我們可以使用系統的createfile不過參數比較多,應用比較複雜,可以用這個函數建立普通檔案,也就建立管道(pipe)可以用于網絡,也就用于本地等.我們的目的就是實作簡單的檔案操作是以沒有應用這麼複雜的函數.
cfile file(_t("c://temp/a.txt"),cfile::modecreate|cfile::readonly);
// 我們可以用cfile類,當然象stl中fstream,ostream,c中的fopen都可以,
// 以建立模式打開一個檔案cfile::modecreate,stl中是ios_base::trunc
// 如果檔案c:/temp/a.txt存在,我們就讀取檔案,如果不存在我們就建立
2)檔案複制
copyfile(_t("c://temp/a.txt"),t("c://temp/b.txt"),true);
// copyfile參數說明,參數1:要複制的檔案名,2:複制檔案的新檔案名,
// 3;是否覆寫,如果發現參數2指定的檔案名已經存在,當為true是表示
// 覆寫,false時表示不覆寫.
// 說明.輸入的參數2不能包括新目錄内,記此函數隻能建立檔案,不能建立檔案夾
3)檔案删除
deletefile(_t("c://temp/a.txt"));
// 參數說明,參數表示要删除的檔案名
3:建立删除一個目錄(檔案夾)
如何系統建立一個目錄和檔案夾.
1):建立一個目錄
createdirectory(_t("c:/temp"),null);
// 第一個參數是要建立的檔案目錄名,第二個參數是檔案夾的屬性.
// 記住:我們隻能從一級目錄建立一級目錄.
2)删除一個目錄
removedirectory(_t("c:/temp"));
// 删除目錄,
// 記住:隻能從内層目錄一層一層向外删除,删除目錄時,首先要删除裡面的檔案,不然無法删除
應用上面基本知識,我們定義一個自己的類,實作檔案(檔案夾)删除複制,以及同級檔案夾的大小,檔案夾内檔案的數量.定義如下操作.
// 拷貝檔案
void ucopy(lpctstr soriginalfile,lpctstr snewfile,bool bskipifexists = false);
// 拷貝檔案夾
void ucopyfolder(lpctstr soriginalfolder,lpctstr snewfolder,bool bskipifexists = false);
// 擷取檔案大小,位元組數
long ugetfilebytessize(lpctstr soriginalfile);
// 擷取檔案夾的大小,位元組數
long ugetfolderbytessize(lpctstr szfolderr,bool bsubfolder = true);
// 建立檔案夾
bool ucreatefolder(lpctstr szfolde);
// 獲得檔案夾内檔案數量
int ugetfolderfiles(lpctstr szfolder,bool bsubfolder = true);
// 删除檔案(最後一項指定是否徹底删除,徹底删除後資料無法恢複)
void udeletefile(lpctstr szfile,bool bquietdelete = false);
// 删除檔案夾(最後一項指定是否徹底删除,,徹底删除後資料無法恢複)
void udeletefolder(lpctstr szfolder, bool bsubfolder = true, bool bquietdelete = false);
// 關閉應用程式(如果删除,複制應用程式時,應用程式必須是關閉狀态的),需要使用者判斷關閉.
bool ucloseapplication(lpctstr szfolder,bool baskuser = false);
如何使用?
在要使用的檔案中加入.
#include "ufile.h"
定義如下變量
cufile file;
可以使用功能
file.ucloseapplication("c://temp//cmd.exe",true);
file.ucopyfolder("c://temp","d://temp");
int folderfiels = file.ugetfolderfiles("c://temp");
long foldersize = file.ugetfolderbytessize("d://temp");
foldersize = file.ugetfilebytessize("d://temp//cmd.exe");
file.udeletefolder("d://temp");
file.ucreatefolder("c://temp//temp//temp//temp//tes.txt");
file.ucopy("c://temp//test.htm","d://temp//test.htm");
file.udeletefile("c://temp//test.htm",true);
下載下傳這類請到http://www.exuetang.net