var FileAttrs: Integer; sr: TSearchRec; sDir: string; begin FileAttrs := FileAttrs + faAnyFile; sDir := GetCurrentDir + '\Temp\'; if FindFirst(sDir + '*.txt', FileAttrs, sr) = 0 then begin repeat if (sr.Name <> '') then begin with Dm.ADOQry do begin close; sql.Clear; sql.Add('insert into Ftp_Files(File_Name) values(''' + sr.Name + ''')'); ExecSQL; end; end; Application.ProcessMessages; until FindNext(sr) <> 0; FindClose(sr); end; end;参考一下
procedure SearchFileEx(const Dir, Ext: string; Files: TStrings); var Found: TSearchRec; i: integer; Dirs: TStrings; Finished: integer; StopSearch: Boolean; begin StopSearch := False; Dirs := TStringList.Create; Finished := FindFirst(Dir + '*.*', 63, Found); while (Finished = 0) and not (StopSearch) do begin if (Found.Name <> '.') then begin if (Found.Attr and faDirectory) = faDirectory then Dirs.Add(Dir + Found.Name) else if Pos(UpperCase(Ext), UpperCase(Found.Name)) > 0 then Files.Add(Dir + Found.Name); end; Finished := FindNext(Found); end; FindClose(Found); if not StopSearch then for i := 0 to Dirs.Count - 1 do SearchFileEx(Dirs[i], Ext, Files); Dirs.Free; end;
1. 获取当前目录下的所有下一级子目录,2. 存入字符串列表中(Tstrings)。 其中,用到了几个API函数。 FindFirst是找出指定目录下第一个文件或目录。 FindNext一般和FindFirst配合使用,用来找出下一个文件或目录。 FindClose用来关闭查询。 (以上函数Delphi在线帮助中有详尽解释,在此不赘述); 3. 用FileExists函数查找当前目录, 4. 寻找是否有满足条件的文件存在。 5. 依次使各个子目录成为当前目录, 6. 递归调用本函数。 7. 释放资源, 8. 返回查询结果。代码如下: 1. 从搜索记录中判断是否是子目录。 function IsValidDir(SearchRec:TSearchRec):Boolean; begin if (SearchRec.Attr=16) and(SearchRec.Name<>'.') and(SearchRec.Name<>'..') then Result:=True else Result:=False; end;2. 这是查询主体函数。参数介绍:Mainpath: 指定的查询目录。 Filename: 欲查询的文件。 Foundresult: 返回的含完整路径的匹配文件(可能有多个)。 如果有匹配文件,函数返回True,否则,返回False; function SearchFile(mainpath:string;filename:string; var foundresult:TStrings):Boolean; var i:integer; Found:Boolean; subdir1:TStrings; searchRec:TsearchRec; begin found:=false; if Trim(filename)<>'' then begin subdir1:=TStringList.Create;//字符串列表必须动态生成 //找出所有下级子目录。 if (FindFirst(mainpath+'*.*', faDirectory, SearchRec)=0) then begin if IsValidDir(SearchRec) then subdir1.Add(SearchRec.Name); while (FindNext(SearchRec) = 0) do begin if IsValidDir(SearchRec) then subdir1.Add(SearchRec.Name); end; end; FindClose(SearchRec); //查找当前目录。 if FileExists(mainpath+filename) then begin found:=true; foundresult.Add(mainpath+filename); end; //这是递归部分,查找各子目录。 for i:=0 to subdir1.Count-1 do found:=Searchfile(mainpath+subdir1.Strings[i]+ '\',Filename,foundresult)or found; //资源释放并返回结果。 subdir1.Free; end; result:=found; end;
FileAttrs: Integer;
sr: TSearchRec;
sDir: string;
begin
FileAttrs := FileAttrs + faAnyFile;
sDir := GetCurrentDir + '\Temp\';
if FindFirst(sDir + '*.txt', FileAttrs, sr) = 0 then
begin
repeat
if (sr.Name <> '') then
begin
with Dm.ADOQry do
begin
close;
sql.Clear;
sql.Add('insert into Ftp_Files(File_Name) values(''' + sr.Name + ''')');
ExecSQL;
end;
end;
Application.ProcessMessages;
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;参考一下
var
Found: TSearchRec;
i: integer;
Dirs: TStrings;
Finished: integer;
StopSearch: Boolean;
begin
StopSearch := False;
Dirs := TStringList.Create;
Finished := FindFirst(Dir + '*.*', 63, Found);
while (Finished = 0) and not (StopSearch) do
begin
if (Found.Name <> '.') then
begin
if (Found.Attr and faDirectory) = faDirectory then
Dirs.Add(Dir + Found.Name)
else
if Pos(UpperCase(Ext), UpperCase(Found.Name)) > 0 then
Files.Add(Dir + Found.Name);
end;
Finished := FindNext(Found);
end;
FindClose(Found);
if not StopSearch then
for i := 0 to Dirs.Count - 1 do
SearchFileEx(Dirs[i], Ext, Files);
Dirs.Free;
end;
其中,用到了几个API函数。
FindFirst是找出指定目录下第一个文件或目录。
FindNext一般和FindFirst配合使用,用来找出下一个文件或目录。
FindClose用来关闭查询。
(以上函数Delphi在线帮助中有详尽解释,在此不赘述);
3. 用FileExists函数查找当前目录,
4. 寻找是否有满足条件的文件存在。
5. 依次使各个子目录成为当前目录,
6. 递归调用本函数。
7. 释放资源,
8. 返回查询结果。代码如下:
1. 从搜索记录中判断是否是子目录。
function IsValidDir(SearchRec:TSearchRec):Boolean;
begin
if (SearchRec.Attr=16) and(SearchRec.Name<>'.') and(SearchRec.Name<>'..') then
Result:=True
else
Result:=False;
end;2. 这是查询主体函数。参数介绍:Mainpath: 指定的查询目录。
Filename: 欲查询的文件。
Foundresult: 返回的含完整路径的匹配文件(可能有多个)。
如果有匹配文件,函数返回True,否则,返回False;
function SearchFile(mainpath:string;filename:string;
var foundresult:TStrings):Boolean;
var i:integer;
Found:Boolean;
subdir1:TStrings;
searchRec:TsearchRec;
begin
found:=false;
if Trim(filename)<>'' then
begin
subdir1:=TStringList.Create;//字符串列表必须动态生成
//找出所有下级子目录。
if (FindFirst(mainpath+'*.*', faDirectory, SearchRec)=0) then
begin
if IsValidDir(SearchRec) then
subdir1.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
begin
if IsValidDir(SearchRec) then
subdir1.Add(SearchRec.Name);
end;
end;
FindClose(SearchRec);
//查找当前目录。
if FileExists(mainpath+filename) then
begin
found:=true;
foundresult.Add(mainpath+filename);
end;
//这是递归部分,查找各子目录。
for i:=0 to subdir1.Count-1 do
found:=Searchfile(mainpath+subdir1.Strings[i]+
'\',Filename,foundresult)or found;
//资源释放并返回结果。
subdir1.Free;
end;
result:=found;
end;