一、類CfileFindExt功能說明 大家經常需要對指定目錄下的所有文件進行搜索或其它相同操作。若文件數很多,逐一對每個文件手工操作,很費時。作者用基於層次遍歷的非遞歸算法(以減少運行時的時間和空間開銷)實現了一個CFileFind的擴展類CFileFindExt,該類可以對指定目錄下的所有文件進行搜索或相同的批處理操作,同時也可根據搜索後得到的文件名對每個文件分別進行處理。 二、類 CFileFindExt 的接口說明及用法示例: 1、頭文件、處理函數、以及類的聲明:
#include "stdafx.h.h" #include "FileFindExt.h" //①一個參數型處理函數: BOOL ProcessFile1(CString SrcFile) //文件名可自定義 { //自定義函數體 } //②兩個參數型處理函數: BOOL ProcessFile2(CString SrcFile, CString DstFile) //文件名可自定義 { //自定義函數體 } //③類的聲明 CFileFindExt ProcessDir;2、調用說明及示例: ① 對所有文件進行一個參數型函數批處理
調用示例:BOOL ret=ProcessDir. DoProcess(DirName, ProcessFile1, FileExtName); 功能說明:對指定目錄下、指定文件擴展名的所有文件,調用一個參數型處理函數進行批處理, 參數說明:DirName:指定目錄名 ProcessFile1:一個參數型處理函數批針PROFUN1 FileExtName:指定擴展名,缺省為所有類型文件 輸出說明:1、對所有文件處理都成功,則返回true; 2、某一文件處理出錯(函數ProcessFile1 ()返回false),或分配內存不足時,則終止搜索,返回false② 對所有文件進行兩個參數型函數批處理
調用示例:BOOL ret=ProcessDir.DoProcess(DirName, ProcessFile2, , DstDir, SrcFileExt, DstFileExt); 功能說明:對指定目錄下、指定文件擴展名的所有文件,調用兩個參數型處理函數ProcessFile2進行批處理, 參數說明:DirName: 指定目錄名 ProcessFile2:兩個參數型處理函數批針PROFUN2 DstDir:目標文件存放根目錄名 SrcFileExt:源文件擴展名,缺省為所有類型文件 DstFileExt:目標文件擴展名,缺省為所有類型文件 輸出說明:1、對所有文件處理都成功,則返回true; 2、某一文件處理出錯(函數process()返回false),或分配內存不足時,則終止搜索,返回false③ 搜索所有文件名
調用示例:BOOL ret=ProcessDir.SearchFiles(DirName, FileExtName); 功能說明:搜索指定目錄下、指定擴展名的所有文件 參數說明:DirName: 指定目錄名 FileExtName:指定擴展名,缺省為所有類型文件 輸出說明:1、所有文件的相對路徑文件名(相對於起始搜索路徑)保存在成員變量數組m_FileNames中; 2、成功返回true,分配內存不足時返回false④ 獲取文件總數
調用示例:int iFiles=ProcessDir.GetSize(); 功能說明: 獲取文件總數 參數說明: 無 輸出說明: 返回文件名成員變量數組m_FileNames的大小⑤ 獲取文件名
調用示例:CString FileName=ProcessDir.GetAt(nFileIndex); 功能說明: 獲取文件名 參數說明: nFileIndex:要獲取的文件名在成員變量數組中的位置 輸出說明: 返回成員變量數組m_FileNames中的第nFileIndex個文件名說明:以上五個成員函數中,第一二個函數①②是對指定目錄下的所有文件進行相同的批處理操作。結合後三個函數③④⑤,便可對每個文件分別進行處理,具體用法如下:
CFileFindExt ProcessDir; BOOL ret=ProcessDir.SearchFiles(Dir, "*.*"); if (!ret) { //錯誤處理 } int iFiles=ProcessDir.GetSize(); for (int j=0;j<iFiles;j++) { CString FileName=ProcessDir.GetAt(j); //以下對每個文件分別進行處理 }三、示例工程說明 為簡要地說明CFileFindExt類的用法,作者做了一個簡單的示例工程,分別對該工程下TestDir目錄的所有子目錄中的文本文件進行:
本文示例代碼或素材下載