天天看點

檔案(檔案夾)删除拷貝操作類

檔案(檔案夾)相關操作.以下各種讨論基于windows+vc7.0開發環境.

實作檔案(檔案夾)操作的方式和函數多種多樣,在這裡我們隻是很淺顯讨論其中的一兩中方法的應用.如果你想了解更多的請參考你編譯系統的的幫助檔案.也可以和我讨論:

msn:[email protected]

為了更好的對檔案(檔案夾)進行操作,我們先講解一些基本知識.最後我們将實作一個基于我們自己方法的檔案(檔案夾)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