線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1412
推到 Plurk!
推到 Facebook!

判斷目錄時,有時會錯誤

答題得分者是:max5020
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-21 17:12:03 IP:61.218.xxx.xxx 訂閱
捉目錄下面所有的檔案,包括子目錄裡面的檔案
程式來源
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
編輯記錄
jackiemi2_seed 重新編輯於 2009-05-21 17:18:57, 註解 無‧
jackiemi2_seed 重新編輯於 2009-05-21 22:59:04, 註解 無‧
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-21 18:20:04 IP:59.120.xxx.xxx 訂閱
這是我最近寫的, 測試是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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-21 20:22:50 IP:59.112.xxx.xxx 訂閱
有問題, 你拿我寫的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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-05-21 23:01:15 IP:211.74.xxx.xxx 訂閱
感謝小傑克兄及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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-05-22 00:50:25 IP:59.112.xxx.xxx 訂閱
啊, 我的程式是很久前寫的, 現在看看確實是有錯誤, 會找不出隱藏檔
確實如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
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-05-22 01:50:55, 註解 無‧
小傑克 重新編輯於 2009-05-22 02:04:51, 註解 無‧
terrygobb
一般會員


發表:5
回覆:22
積分:5
註冊:2009-04-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-05-22 12:35:50 IP:220.130.xxx.xxx 訂閱
wa~又偷學一樣@@~

謝謝分享@_@~
------
尋找對的人,對的方法,對的態度跟對的環境
系統時間:2024-05-16 16:21:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!