判斷目錄時,有時會錯誤 |
答題得分者是:max5020
|
jackiemi2_seed
中階會員 發表:37 回覆:97 積分:76 註冊:2006-09-11 發送簡訊給我 |
捉目錄下面所有的檔案,包括子目錄裡面的檔案
程式來源 http://delphi.ktop.com.tw/board.php?cid=30&fid=1498&tid=98261 只作一點點點小修改 測試時,發現有些目錄會被判斷成檔案 請問一下,程式有問題嗎??? thanks
------
OS : Win 7 pro Program : Delphi 7 DataBase : Ms Sql 2008
附加檔案:4a151ae36ac59_目錄.rar
編輯記錄
|
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
這是我最近寫的, 測試是OK的, 你參考看看
[code delphi] sdf:= dir '*.*'; if FindFirst(sdf, faanyfile, sr) = 0 then begin repeat if (sr.name <> '.') and (sr.name <> '..') then begin if (sr.attr and faDirectory) <> faDirectory then begin ext:= lowercase(ExtractFileExt(sr.Name)); if (ext='.mp3') or (ext='.wma') then Add_File(sr, dir) end else if cbSUB.Checked then List_File(dir sr.Name); end; until findnext(sr) <> 0; FindClose(sr); end; [/code] |
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
有問題, 你拿我寫的sample去改比較不會有問題
你改的這個有一個小地方可能出錯 if Rec.Name[1] = '.' then Continue; // 這行有機率會錯 if Rec.Name[1] = '..' then Continue; // 這行一定會錯 ===================引 用 jackiemi2_seed 文 章=================== 捉目錄下面所有的檔案,包括子目錄裡面的檔案 程式來源 http://delphi.ktop.com.tw/board.php?cid=30&fid=1498&tid=98261 只作一點點點小修改 測試時,發現有些目錄會被判斷成檔案 請問一下,程式有問題嗎??? thanks
------
額有朝天骨,眼中有靈光 |
jackiemi2_seed
中階會員 發表:37 回覆:97 積分:76 註冊:2006-09-11 發送簡訊給我 |
感謝小傑克兄及max5020兄的回復
看了二位前輩的回文及程式改了二個地方 1. if Rec.Name[1] = '.' then Continue; if Rec.Name[1] = '..' then Continue; 改成 if Rec.Name = '.' then Continue; if Rec.Name = '..' then Continue 2. if (Rec.Attr <> fadirectory) then begin 改成 if ((Rec.attr and faDirectory) <> fadirectory) then begin max5020兄可以說明一下這二行程式有什麼不同嗎?? 小弟在家測的目錄是C:\Documents and Settings\Administrator 目前程式三個button執行結果,小弟和max5020兄資料筆數是一樣多 小傑克兄的資料筆數比較少 小傑克兄,您的程式有點難度,小弟水準不夠,不是全部都看得懂, 程式從網頁上copy下來放,不知是否有誤,請check一下
------
OS : Win 7 pro Program : Delphi 7 DataBase : Ms Sql 2008 |
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
啊, 我的程式是很久前寫的, 現在看看確實是有錯誤, 會找不出隱藏檔
確實如max5020 大所寫的方式是正確的 因為 faReadOnly = $00000001 platform; faHidden = $00000002 platform; faSysFile = $00000004 platform; faVolumeID = $00000008 platform; faDirectory = $00000010; faArchive = $00000020 platform; faSymLink = $00000040 platform; faAnyFile = $0000003F; 也就是說如果是 sr.attr = 19 = 16 2 1 = faDirectory faHidden faReadOnly 這邊用 and , or 是 交集 和 聯集, sr.attr 假設是19 則 ( sr.attr 19 and faDirectory 16) = faDirectory 所以寫 ( sr.attr and faDirectory) = faDirectory 是找 sr.attr 中有包括 faDirectory 屬性的 如果寫 sr.attr = faDirectory 則當資料夾有 ReadOnly 或是 Hidden 或是 SysFile 屬性就會判斷錯 比如說 C:\Documents and Settings\LocalService sr.attr = 22 就是 faHidden or faSysFile or faDirectory
------
額有朝天骨,眼中有靈光 |
terrygobb
一般會員 發表:5 回覆:22 積分:5 註冊:2009-04-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |