方法可行,執行正確。
拿到我們的專案中,卻遇到一些問題:程式中一些讀檔案的**,開始報異常,都不到檔案。這些都是以前沒有遇到過的問題。
到底是什麼情況呢?排查了好久,終於發現使用該文章提供的計算資料夾大小的函式(暫且叫做getdirectorysize),其中有改變當前目錄的**:
chdir(dir);我們的專案是多執行緒的,乙個執行緒呼叫getdirectorysize,呼叫的過程中改變了當前目錄,而此時另乙個執行緒使用相對路徑去讀檔案,原來能讀到的,現在就讀不到了。特別提示chdir改變的是,當前程序(當然包括其下所有執行緒)的工作目錄!!!(具體可以檢視執行緒共享程序的那些資源?)
為了去掉getdirectorysize的***,我重新實現了該函式:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 89//計算某目錄所佔空間大小(包含本身的4096byte)
10long
long
int getdirectorysize(char *dir)
1122
23//
先加上自身目錄的大小
24 lstat(dir, &statbuf);
25 totalsize+=statbuf.st_size;
2627
while ((entry = readdir(dp)) !=null)
2840
41long
long
int subdirsize =getdirectorysize(subdir);
42 totalsize+=subdirsize;43}
44else
4548}49
50closedir(dp);
51return
totalsize;52}
5354
int main(int argc, char*argv)
55
C 獲取資料夾大小
當然了都需要引入system.io這個命名空間 第乙個 public static long getdirectorylength string dirpath 獲取di中所有的資料夾,並存到乙個新的物件陣列中,以進行遞迴 directoryinfo dis di.getdirectories if...
Linux C 刪除資料夾
方法一 include include include include include include define maxdir 256 char dirname maxdir rootdir maxdir void del dir char path while dirp readdir dp ...
Linux C遍歷資料夾
0x01 首先講一講遍歷資料夾必須要知道的乙個結構體struct dirent struct dirent0x2 具體用法見如下 query.c include include intmain int argc,char ar pdir opendir ar 1 if null pdir while...