關於取得資料夾下所有檔案大小的問題 |
尚未結案
|
yjh0225
一般會員 發表:7 回覆:7 積分:2 註冊:2003-10-13 發送簡訊給我 |
這是我寫的程式,可以回傳指定資料夾下所有的檔案大小,單單來執行時很正常,但是當要查詢的資料下有500個左右的檔案,且用一個 FOR 迴圈快速不斷的去詢問目錄大小時,時間一久程式回傳的值竟然是錯誤的。請問各位大大,我的程式有什麼還需要改進的或是有錯誤的地方,才不會有這樣子的情形發生。
double dirSize(AnsiString Sour) { TSearchRec FileRec; OFSTRUCT ofs; double fsize = 0; HFILE HMyFile; if(Sour[Sour.Length()] != '\\' ) Sour = Sour '\\'; if(! DirectoryExists(ASourceDir)) { ShowMessage("來源目錄不存在!!"); } else { if(FindFirst(Sour "*.*",faAnyFile,FileRec) == 0) { do { if(FileRec.Attr == 16) { if((FileRec.Name != ".") && (FileRec.Name != "..")) fsize = dirSize(Sour FileRec.Name); } else { HMyFile = ::OpenFile((Sour FileRec.Name).c_str(),&ofs,OF_READ); fsize = (double)::GetFileSize((void *)HMyFile,NULL); } }while(FindNext(FileRec) == 0); } FindClose(FileRec); delete &FileRec; delete &ofs; } return fsize; } |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
yjh0225 您好: 我試過您的程式,是有點小問題,而且有些地方也是可以省略掉的,我將它修改如下後,運作出來的結果與檔案總管查看目錄內容的結果是一樣的,我將修改過的地方加了簡單的註解,您比對看看、參考一下吧:
double dirSize(AnsiString Sour) { TSearchRec FileRec; double fsize = 0; if (!DirectoryExists(Sour)) { ShowMessage("來源目錄不存在!!"); } else { chdir(Sour.c_str()); // 切換到指定目錄去 if (FindFirst("*.*",faAnyFile,FileRec) == 0) { // 搜尋目錄內所有檔案 do { if (FileRec.Attr & faDirectory) { // 如果是目錄 if ((FileRec.Name != ".") && (FileRec.Name != "..")) { // 如果不是 "相對目錄" 代碼的話 fsize = dirSize(FileRec.Name); // 遞迴找尋子目錄內容 chdir(String("..").c_str()); // 切換回前一層目錄 } } else { fsize = (double)FileRec.Size; // 取得檔案大小 } } while (FindNext(FileRec) == 0); } FindClose(FileRec); } return fsize; }7 天天敲鍵盤 v 時時按滑鼠 8 |
yjh0225
一般會員 發表:7 回覆:7 積分:2 註冊:2003-10-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |