輕輕鬆鬆找檔案--支援回撥函式的通用檔案查詢函式 (轉)
輕輕鬆鬆查詢
在平常的當中,經常會碰到查詢某一個目錄下某一類檔案或者所有檔案的問題,為了適應不同的需要,我們經常不得不編寫大量的類似的程式碼,有沒有可能寫一個通用的查詢檔案的,找到一個檔案後就進行處理的呢?這樣我們只要編寫處理檔案的部分就可以了,不需要編寫查詢檔案的部分!答案是肯定的。下面的這個程式就能實現這個功能!這個演算法的有待於改進,主要是目錄處理部分(特別指出的地方)。
明:
為回撥,FindFile函式找到一個匹配的檔案之後就會這個函式。
的第一個引數找到的檔名,你在回撥函式中可以根據檔名進行操作。
的第二個引數為找到的檔案的相關記錄資訊,是一個TSearchRec結構。
的第三、四個引數分別為決定是否終止檔案的查詢,臨時決定是否查詢某個子目錄!
的引數:
一個決定是否退出查詢,應該初始化為false;
二個為要查詢路徑;
三個為檔名,可以包含所支援的任何萬用字元的格式;預設所有的檔案
四個為回撥函式,預設為空
五個決定是否查詢子目錄,預設為查詢子目錄
六個決定是否在查詢檔案的時候處理其他的訊息,預設為處理其他的訊息,這個引數如果為false的話,可以加快處理速度,但是將不會響應程式的任何訊息。
有意見和建議請E_:">Kingron@163.net
type
TFindCallBack=procedure (const filename:string;const info:TSearchRec;var bQuit,bSub:boolean);
procedure FindFile(var quit:boolean;const path: String;const filename:string='*.*';
proc:TFindCallBack=nil;bSub:boolean=true;const bMsg:boolean=true);
var
fpath: String;
info: TsearchRec;
procedure ProcessAFile;
begin
if (info.Name<>'.') and (info.Name<>'..') and ((info.Attr and faDirectory)<>faDirectory) then
begin
if assigned(proc) then
proc(fpath+info.FindData.cFileName,info,quit,bsub);
end;
end;
procedure ProcessADirectory;
begin
if (info.Name<>'.') and (info.Name<>'..') and ((info.attr and fadirectory)=fadirectory) then
findfile(quit,fpath+info.Name,filename,proc,bsub,bmsg);
end;
begin
if path[length(path)]<>'' then
fpath:=path+''
else
fpath:=path;
try
if 0=findfirst(fpath+filename,faanyfile and (not fadirectory),info) then
begin
ProcessAFile;
while 0=findnext(info) do
begin
ProcessAFile;
if bmsg then application.ProcessMessages;
if quit then
begin
findclose(info);
exit;
end;
end;
end;
finally
findclose(info);
end;
try
if bsub and (0=findfirst(fpath+'*',faanyfile,info)) then 兒有待於改進因為會查詢
// 所有的檔案,並不只是目錄
begin
ProcessADirectory;
while findnext(info)=0 do
ProcessADirectory;
end;
finally
findclose(info);
end;
end;
例子:
//回撥函式:
procedure aaa(const filename:string;const info:tsearchrec;var quit,bsub:boolean);
begin
form1.listbox1.Items.Add(filename);
quit:=form1.qqq;
bsub:=form1.checkbox1.Checked;
end;
procedure TForm1.Button1Click(Sender: T);
begin
listbox1.Clear; 始化
qqq:=false;
button1.Enabled:=false;
findfile(qqq,edit1.text,edit2.text,aaa,checkbox1.checked,checkbox2.checked);
showmessage(inttostr(listbox1.items.count));
button1.Enabled:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
qqq:=true; 止查詢
end;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987600/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 函式指標、回撥函式、動態記憶體分配、檔案操作函式指標記憶體
- 輸出EXCEL檔案的通用函式,很實用 (轉)Excel函式
- 回撥函式函式
- 回撥函式,求積函式函式
- 回撥函式快速使用 (轉)函式
- 各類檔案管理函式 (轉)函式
- 回撥函式 與 函式閉包函式
- 函式指標&回撥函式Callback函式指標
- 回撥函式的作用函式
- JavaScript 回撥函式JavaScript函式
- JavaScript回撥函式JavaScript函式
- JS—回撥函式JS函式
- 動畫回撥函式動畫函式
- java回撥函式Java函式
- 回撥函式(CallBack)函式
- 函式指標之回撥函式和轉移表函式指標
- 檔案處理函式函式
- JS閉包函式和回撥函式JS函式
- 回撥函式的理解(一)函式
- js中的回撥函式JS函式
- Java回撥函式的理解Java函式
- TLS回撥函式(Note)TLS函式
- java 回撥函式示例Java函式
- Python回撥函式Python函式
- android回撥函式Android函式
- 函式回撥(C++)函式C++
- 理解javascript中的回撥函式(callback)【轉】JavaScript函式
- 檔案鎖fcntl()函式的使用函式
- 函式指標的重要用途——回撥函式函式指標
- 讀寫INI檔案的四個函式 (轉)函式
- [JS]回撥函式和回撥地獄JS函式
- Api函式列表——與檔案相關 (轉)API函式
- 【知識點】inline函式、回撥函式、普通函式inline函式
- 【不在混淆的C】指標函式、函式指標、回撥函式指標函式
- JavaScript:鉤子函式與回撥函式的區別JavaScript函式
- 檔案檢測函式 feof, ferror,clearerr C庫函式函式Error
- 九句話輕鬆理解執行緒與非同步以及回撥函式執行緒非同步函式
- Python技法3:匿名函式、回撥函式和高階函式Python函式