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

請問搜尋檔案FinfFist()函式的用法

尚未結案
airwei
一般會員


發表:19
回覆:7
積分:5
註冊:2002-12-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-27 00:36:12 IP:211.76.xxx.xxx 未訂閱
大家好: HELP中 FindFist有Example,如下. var sr: TSearchRec; FileAttrs: Integer; begin .......部份沒用到的程式碼簡略 ....... FileAttrs := faAnyFile; RowCount := 0; if FindFirst(Edit1.Text, FileAttrs, sr) = 0 then begin repeat if (sr.Attr and FileAttrs) = sr.Attr then begin RowCount := RowCount 1; Cells[1,RowCount-1] := sr.Name; Cells[2,RowCount-1] := IntToStr(sr.Size); end; until FindNext(sr) <> 0; FindClose(sr); end; 請問 if (sr.Attr and FileAttrs) = sr.Attr then 是什麼意思? 我知道是要找出 檔案屬性是faAnyFile的檔案, 不能寫成 if sr.Attr = FileAttrs then 嗎? 我試過是不行,可能癥結在 and ,但我不知道是什麼意思,是否有誰可以 幫忙解惑一下
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-27 01:25:29 IP:61.221.xxx.xxx 未訂閱
faReadOnly = 1 faHidden = 2 faSysFile System = 4 faVolumeID = 8 faDirectory = 16 faArchive = 32 faAnyFile = 63 檔案的屬性每個 bit 都有其意義, 由上面的數據可以看出各個位元所代表的意義, 而 faAnyFileAny 是把所有位元都設成 1 (sr.Attr and FileAttrs)=sr.Attr 的意思是指 sr 符合 FileAttrs 條件 當 FileAttrs = faAnyFile 時, 不會有 sr.Attr =FileAttrs 的情形出現 (比如 faVolumeID 不可能和 faDirectory 同時出現)
airwei
一般會員


發表:19
回覆:7
積分:5
註冊:2002-12-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-27 10:49:09 IP:211.76.xxx.xxx 未訂閱
Brain 謝謝,我知道了,但 我仍對and的用法感到疑惑, 若以faAnyFile 來說的話, 這是什麼樣的演算法 可以讓所有的檔案屬性碰到63faAnyFile 都等於原來的 檔案屬性 (sr.Attr) and 63(faAnyFile) = (sr.Attr) ....... 感覺是以前學過的邏輯閘 互斥或 抱歉 有點吹毛求疵, 但是我要把code 寫進專案裡, 若有一行不甚瞭解的code, 總是感到心裡不安.
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-27 11:41:28 IP:61.221.xxx.xxx 未訂閱
-------- 1. 如果你的問題在於語意: 如果 FileAttrs = faReadOnly faHidden 那表示要找 "包含有唯讀、隱藏 屬性的檔案" 如果有一個檔案, 它是 唯讀、隱藏、系統 屬性 那麼它是不是你要找的?? 如果不是的話, 用 (sr.Attr AND FileAttrs)=sr.Attr 可以將它過濾掉 因為 唯讀.隱藏.系統 AND 唯讀.隱藏 的結果是 唯讀隱藏, 和原 sr.Attr 不相等 FindFirst 找出的檔案的屬性會包含有 FileAttrs 中的任一屬性 (即只要 (sr.Attr AND FileAttrs)<>0 的就會被抓出來) 範例中的 (sr.Attr AND FileAttrs)=sr.Attr 表示, 如果 sr.Attr 不可以包含 FileAttrs 以外的屬性 -------- 2. 如果你的問題在於 and 的功能: AND 就是 及閘, 都為 1 的才會輸出 1, 否則輸出 0 再配合一個觀念: 檔案屬性是每個位元代表一個意義, 一個檔案可為數個屬性的組合 (可以有數個位元為1) 例:當 FileAttrs = faAnyFile 時, 即為 63 二進制 111111 唯讀且隱藏的檔案, faReadOnly 是 1, faHidden 是 2, 該檔案屬性二進制值為 000011 AND 運算時: 000011 111111 ------ 000011 回到 sr.Attr 原值 從上列橫式中可以發現, faAnyFiles 各位元都是 1, AND 的結果當然會是 sr.Attr 此即布林運算中提的.. A AND 1 = A (任何值通過及閘,結果不變)
系統時間:2024-06-24 21:04:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!