程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 搜索或處理指定目錄下的所有文件

搜索或處理指定目錄下的所有文件

編輯:vc教程
一個CFileFind的擴展類CFileFindExt ----搜索或處理指定目錄下的所有文件

   一、類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目錄的所有子目錄中的文本文件進行:
  • 1、統計該目錄下所有文件字節數,以說明成員函數DoProcess如何對用一個參數型函數指針進行批處理操作;
  • 2、拷貝該目錄下的所有文件到同層次下的DstDir目錄下,以說明成員函數DoProcess如何對用兩個參數型函數指針進行批處理操作;
  • 3、拼接該定目錄下的所有文件,以說明如何結合後函數③④⑤,對每個文件分別進行處理。
為簡便起見,本示例工程均假設所有文件長度不是太大。 四、歡迎大家使用。 今後大家根據需要還可增加返回所有子目錄名函數,以及增加其它多參數(大於2)處理函數功能。如有問題,歡迎與作者聯系:[email protected]

本文示例代碼或素材下載

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved