當前位置:編程學習大全網 - 源碼下載 - 如何用c語言列出目錄樹

如何用c語言列出目錄樹

給妳壹個參考:

相關函數:opendir

表頭文件:#include <ftw.h>

定義函數:int ftw(const char *dir, int (*fn) (const *file, const struct stat *sb, int flag), int depth)

函數說明:ftw() 會從參數dir指定的目錄開始,往下壹層層地遞歸式遍歷子目錄。ftw()會傳三個參數給fn(), 第壹個參數*file指向當時所在的目錄路徑,第二個參數是*sb, 為stat結構指針,第三個參數為旗標,有下面幾種可能值

FTW_F 壹般文件

FTW_D 目錄

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

FTW_SL 符號連接

FTW_NS 無法取得stat結構數據,有可能是權限問題

最後壹個參數depth代表ftw()在進行遍歷目錄時同時打開的文件數。ftw()在遍歷時每壹層目錄至少需要壹個文件描述詞,如果遍歷時用完了depth所給予的限制數目,整個遍歷將因不斷地關文件和開文件操作而顯得緩慢

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

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

附加說明:由於ftw()會動態配置內存使用,請使用正常方式(fn函數返回非零值)來中斷遍歷,不要在fn函數中使用longjmp()

示例:

/*列出/etc/X11目錄下的子目錄*/

#include <sys/stat.h>

#include <unistd.h>

#include <ftw.h>

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

{

if(flag == FTW_D)

printf("%s --- directory\n", file);

else

printf("%s \n",file);

return 0;

}

int main()

{

ftw("/etc/X11",fn,500);

}

  • 上一篇:Javaweb打印源代碼
  • 下一篇:怎麽樣利用macd的頂背離和底背離逃頂 同花順
  • copyright 2024編程學習大全網