nftw遍歷目錄樹

2021-06-28 21:22:50 字數 1138 閱讀 5640

表頭檔案:#include 

定義函式:int nftw(const char *dir, int 

(*fn)(const char *file, const struct stat *sb, int flag, struct ftw *s),

depth, int 

flags)

函式說明:nftw()與ftw()很像,都是從引數dir指定的目錄開始, 往下一層層地遞迴遍歷子目錄。 每進入乙個目錄,便會呼叫引數*fn定義的函式來處理。nftw()會傳四個引數給fn(). 第乙個引數*file指向當時所在的目錄路徑,第二個引數是*sb, 為stat結構指標(結構定義請參考stat()),第三個引數為旗標,有底下幾種可能值:

ftw_f 

一般檔案

ftw_d 

目錄ftw_dnr 

不可讀取的目錄。此目錄以下將不被遍歷

ftw_sl 

符號連線

ftw_ns 

無法取得stat結構資料,在可能是許可權問題

ftw_dp 

目錄,而且子目錄都已被遍歷過了

ftw_sln 

符號連線,但連線不存在的檔案

fn()的第四個引數是ftw結構,定義如下:

struct 

ftwnftw()第三個引數depth代表nftw()在進行遍歷目錄時可同時開啟的檔案數。

ftw()在遍歷時每一層目錄至少需要乙個檔案描述詞,如果遍歷時用完了depth所給予的限制數目,整個遍歷將因不斷地關檔案和開檔案操作而顯得的緩慢

nftw()最後乙個引數flags用來指定遍歷時的動作,可指定下列的操作或用or組合

ftw_chdir 

在讀目錄之前先用chdir()移到此目錄

ftw_depth 

執行深度優先搜尋。在遍歷此目錄前先將所有子目錄遍歷完

ftw_mount 

遍歷時不要跨越到其他檔案系統

ftw_phys 

不要遍歷符號連線的目錄。缺省會遍歷符號連線目錄

如果要結束nftw()的遍歷,fn()只需返回一非0值即可,此值同時也會是nftw()的返回值。否則nftw()會試著遍歷完所有目錄,然後返回0

返 回 值 :遍歷中斷則返回fn()函式的返回值, 全部遍歷完則返回0,若有錯誤發生則返回-1

linux遍歷資料夾(目錄樹)nftw

define xopen source 500 include include include include include ftw f fpath是乙個普通檔案。ftw d fpath是乙個目錄。ftw dnr fpath是乙個不能被讀的目錄。ftw dp fpath是乙個目錄,並且 flag引...

遍歷目錄樹

cpath os.getcwd 如果目錄名字為中文 需要轉碼處理 upath unicode cpath,utf 8 for filename in os.listdir upath print filenameimport os for foldername,subfolders,filename...

ftw遍歷目錄樹

表頭檔案 include 定義函式 int ftw const char dir,int fn const file,const struct stat sb,int flag int depth 函式說明 ftw 會從引數dir指定的 目錄開始,往下一層層地遞迴式遍歷子 目錄。ftw 會傳三個引數...