VC 遍歷目錄

2021-06-06 01:26:20 字數 2575 閱讀 6904

所謂遍歷目錄,就是給定乙個目錄,訪問其中的所有檔案

(包括子目錄下的檔案

)。迭代是比較常用的遍歷演算法。本文利用

c++物件導向的特性,通過乙個類

cbrowsedir

,對目錄遍歷進行了封裝。使用者只需掌握該類四個成員函式的用法,就可以在自己的程式中,很方便地實現目錄遍歷。 類

cbrowsedir

一、類成員函式說明:

bool setinitdir(const char *dir);

功能:設定要遍歷的目錄。

引數:dir

指向要遍歷的目錄,可以使用相對路徑,比如

"d:../hawk"

;還可以使用網路路徑,比如

"//wf/d/hawk"(

其中wf

是主機名,

d是共享目錄,

hawk

是目錄)。

返回值:返回

true

,表示設定成功;返回

false

,說明目錄不可用。

bool beginbrowse(const char *filespec);

功能:開始遍歷目錄中由

filespec

指定的檔案

(包括隱藏檔案)。

引數:filespec

指定檔案型別,可以使用萬用字元*和

?,比如

"*.exe"

或"a?.*"

都是合法引數。注意:

filespec

中不能包含路徑,象

"hawk/*.*"

是錯誤的。

返回值:函式返回

true

,表明已順利遍歷完所有檔案;返回

false

,遍歷過程被使用者中止。

virtual bool processfile(const char *filename);

功能:虛函式。每找到乙個檔案,程式就會呼叫

processfile

,並把檔名作為引數傳遞給函式。如果函式返回

false

,則強制遍歷中止,並導致類成員函式函式

beginbrowse

返回false

。使用者應該覆寫此函式,以加入自己的處理**。

引數:filename

指向乙個檔名。注意:

filename

使用絕對路徑。

返回值:返回

true

,繼續遍歷;否則,中止遍歷。

virtual void processdir (const char *currentdir,constchar *parentdir);

功能:虛函式。在遍歷過程中,每進入乙個子目錄,程式就會呼叫

processdir

,並把目錄名及其上一級目錄名作為引數傳遞給函式。如果該目錄是成員函式

setinitdir

指定的初始目錄,則

parentdir=null

。使用者可以覆寫此函式,以加入自己的處理**。比如可以在這裡統計子目錄的個數。

引數:currentdir

指向乙個子目錄。

parentdir

指向currentdir

的父目錄。

注意:currentdir

和parentdir

均使用絕對路徑。

二、使用: 把類

cbrowsedir

的標頭檔案

browsedir.h

及實現檔案

browsedir.cpp

加到專案

(project)

中,然後派生自己的類並覆寫虛函式

processfile

和processdir

。遍歷目錄時,先構造乙個派生類物件,用成員函式

setinitdir

指定目錄,然後呼叫

beginbrowse

開始遍歷。

本文提供了乙個例子

example.cpp

,它從cbrowsedir

派生出子類

cstatdir

,通過統計函式

processfile

及processdir

的呼叫次數,可以得知目錄中的檔案及子目錄個數。程式都有注釋,這裡就不再羅嗦了。

三、注意事項:

1. 類cbrowsedir

會改變當前工作目錄。同乙個相對路徑,使用

cbrowsedir

前後,可能會有不同的含義。因此使用者程式設計時,要小心使用相對路徑。

2. 如果專案

(project)

是乙個mfc

應用程式,直接加入

browsedir.h

及browsedir.cpp

會導致編譯出錯。這是因為預設情況下,

mfc專案使用了預編譯頭

(precompiled header)

,而browsedir.h

和browsedir.cpp

是用標準

c++語句編寫的,沒用預編譯。乙個解決辦法是先用類嚮導生成類

cbrowsedir的"

架子",再把相應的**拷貝過去。

VC 遍歷指定目錄下的檔案

用於輸出指定目錄下的所有檔案的檔名,包括子目錄。版本1 用string處理,方便,容易理解.include include include using namespace std bool isroot string path void findinall string path else 找到的是...

VC 遍歷指定目錄下的檔案

用於輸出指定目錄下的所有檔案的檔名,包括子目錄。版本1 用string處理,方便,容易理解.include include include using namespacestd boolisroot stringpath voidfindinall stringpath else 找到的是檔案 wh...

vc 遍歷目錄下的檔案與總數

使用 findfirstfile和 findnextfile方法 include stdafx.h include include include define len 1024 int filecount 0 深度優先遞迴遍歷目錄中所有的檔案 bool directorylist lpcstr p...