)//假就直接列印
printf
("%s\t%ld\n"
,name,sb.st_size)
;return;}
void
read_dir
(char
*dir)
while
(sdp =
readdir
(dp)
)//讀這個目錄項,繼續判斷是不是目錄,如果是目錄iu還得再進入,如果是檔案就列印
//iffile(sdp->d_name);//不能直接這樣,要絕對路徑才可以
sprintf
(path,
"%s/%s"
, dir, sdp->d_name)
;isfile
(path);}
closedir
(dp)
;return;}
intmain
(int argc,
char
*ar**)
else
return0;
}主函式中,判斷命令列引數,沒有的話就自動給當前目錄".",有的話就去判斷是否是目錄(isfile)
isfile檔案判斷檔案型別,用stat函式獲取檔案屬性,如果是普通檔案就直接列印(名字+大小),是目錄檔案就到目錄函式中再處理read_dir
read_dir:開啟目錄,讀取目錄,處理目錄,重點就是讀取目錄,再將讀到的目錄項判斷其檔案屬性用isfile(),要注意的是往isfile傳入引數的時候要傳入絕對路徑,用sprintf函式借助乙個緩衝區,緩衝區大小最大是256,是作業系統規定的最大檔案路徑長度
遍歷目錄的非遞迴實現
在遞迴計算目錄數目,檔案數目,目錄大小等功能中,我們常用的方式是使用遞迴來實現。但是,遞迴實現因為會不斷向呼叫堆疊中存入資料 包括當前執行的狀態變數等資料 實際上會大量占用記憶體空間,同時執行時間也會受到影響。我們通過乙個儲存目錄路徑的佇列,可以很優雅地實現非遞迴的目錄遍歷,下面我們通過遞迴統計目錄...
遞迴遍歷目錄
遞迴 乙個函式內部在其內部不呼叫其他函式,而是呼叫自身,類似迴圈 注,自己玩自己,防止死遞迴 使用遞迴來遍歷出乙個目錄中的所有檔案 import os def getalldirre path,sp 引數 路徑 返回值 none 完成功能,獲取呼叫者傳遞的路徑下的所有檔案 檔案 直接顯示,資料夾 二...
python 遞迴遍歷指定的目錄
listdir.py import os 遞迴遍歷指定的目錄 level 遞迴的層數,用這個引數來控制列印的縮排 path 遍歷起始絕對路徑 deflistyoudir level path foriin os.listdir path print level 1 iif os.path isdir...