给你简单解释下代码含义吧:
procedure TXXXXXXX.SearchLocalMusicFile(const Dir, FilesFilter: string;
SearchSubDir: Boolean);
var
SearchRec: TSearchRec;
begin
if FindFirst(Dir + FilesFilter, faAnyFile, SearchRec) = 0 then //查找目录和文件,如果找到,进入then后面执行
try
repeat //循环
if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then //如果不是本目录和父目录,继续
begin
Application.ProcessMessages;//防止锁死界面
if (SearchRec.Attr and faDirectory) > 0 then //如果找到的是目录的话
begin
//这里你可以判断下SearchRec.Name的值,如果是35892479,则说明当前这个目录就是你要找的目录,接下来做你的文件拷贝吧。
if SearchSubDir then //如果参数SearchSubDir是真的话,递归搜索子目录
SearchLocalMusicFile(IncludeTrailingPathDelimiter(Dir + SearchRec.Name),
FilesFilter, SearchSubDir);
end
else
begin
{if FAbortSearchLocal then Abort;
SetSearchStatusText(Dir + SearchRec.Name);
if AcceptFileToAdd(SearchRec.Name, cbbSearchLocalFileType.ItemIndex) then
AddSearchLocalFileToListView(Dir + SearchRec.Name);}
这一段代码都是处理文件的,也就是说,当前SearchRec.Name是一个文件,而不是目录。按照你的需求,这部分可以不要(因为你只需要找当前目录)
end;
end;
until FindNext(SearchRec) <> 0; //继续找下一个,如果找不到,退出循环
finally
FindClose(SearchRec);//关闭占用的句柄资源。
end;
end;
如果你只希望找目录,可将第一句:
if FindFirst(Dir + FilesFilter, [red]faAnyFile[/red], SearchRec) = 0 then
的红色部分改成faDirectory,那么FindFirst将只会寻找目录,而忽略文件,大大加快查找速度。
祝你好运。