請問搜尋檔案FinfFist()函式的用法 |
尚未結案
|
airwei
一般會員 ![]() ![]() 發表:19 回覆:7 積分:5 註冊:2002-12-20 發送簡訊給我 |
大家好:
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 發送簡訊給我 |
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 發送簡訊給我 |
|
Brian77
中階會員 ![]() ![]() ![]() 發表:8 回覆:114 積分:94 註冊:2002-05-17 發送簡訊給我 |
--------
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 (任何值通過及閘,結果不變)
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |