function TFrmMain.FindFiles(APath: string): Integer; var SearchRec:TSearchRec; FileAttrs: Integer; FileDriverDateTime,FileSaveDateTime:String; TempFile:String; begin Result:=0; FileAttrs:=faAnyFile; If FindFirst(APath+'\*.*',FileAttrs,SearchRec) = 0 then begin try If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin If SearchRec.Attr = faDirectory then //目录继续搜索,递归 ReSult:=ReSult+FindFiles(APath+'\'+SearchRec.Name) Else begin //是文件则进行转发 try ReSult:=ReSult+1; TempFile:=APath+'\'+SearchRec.Name; Memo1.Lines.Add(TempFile); FileDriverDateTime:=GetFileDriverDateTime(TempFile); FileSaveDateTime:=GetFileSaveDateTime(TempFile); If MoreFilePathTransmitFile(TempFile,'',FileDriverDateTime,FileSaveDateTime) then ; DeleteFile(TempFile); finally end; end; end; While FindNext(SearchRec)=0 do begin If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin If SearchRec.Attr = faDirectory then //目录继续搜索,递归 ReSult:=ReSult+FindFiles(APath+'\'+SearchRec.Name) Else begin //是文件则进行转发 try ReSult:=ReSult+1; TempFile:=APath+'\'+SearchRec.Name; Memo1.Lines.Add(TempFile); FileDriverDateTime:=GetFileDriverDateTime(TempFile); FileSaveDateTime:=GetFileSaveDateTime(TempFile); If MoreFilePathTransmitFile(TempFile,'',FileDriverDateTime,FileSaveDateTime) then ; DeleteFile(TempFile); finally end; end; end; end; finally FindClose(SearchRec); end; end; end; 把我的代码去掉就是了。
查找目录中是否存在某一文件
function FileSearch(const Name, DirList: string): string;
具体用法,请查看相关帮助. 输入这函数名字,delphi会有提示的吧
function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;
你要的结果好像只能遍历去了!一个函数可搞不定。
这些不应该问,随便来来就会了
var
SearchRec:TSearchRec;
FileAttrs: Integer;
FileDriverDateTime,FileSaveDateTime:String;
TempFile:String;
begin
Result:=0;
FileAttrs:=faAnyFile;
If FindFirst(APath+'\*.*',FileAttrs,SearchRec) = 0 then
begin
try
If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
begin
If SearchRec.Attr = faDirectory then //目录继续搜索,递归
ReSult:=ReSult+FindFiles(APath+'\'+SearchRec.Name)
Else begin //是文件则进行转发
try
ReSult:=ReSult+1;
TempFile:=APath+'\'+SearchRec.Name;
Memo1.Lines.Add(TempFile);
FileDriverDateTime:=GetFileDriverDateTime(TempFile);
FileSaveDateTime:=GetFileSaveDateTime(TempFile);
If MoreFilePathTransmitFile(TempFile,'',FileDriverDateTime,FileSaveDateTime) then
;
DeleteFile(TempFile);
finally
end;
end;
end;
While FindNext(SearchRec)=0 do
begin
If(SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
begin
If SearchRec.Attr = faDirectory then //目录继续搜索,递归
ReSult:=ReSult+FindFiles(APath+'\'+SearchRec.Name)
Else begin //是文件则进行转发
try
ReSult:=ReSult+1;
TempFile:=APath+'\'+SearchRec.Name;
Memo1.Lines.Add(TempFile);
FileDriverDateTime:=GetFileDriverDateTime(TempFile);
FileSaveDateTime:=GetFileSaveDateTime(TempFile);
If MoreFilePathTransmitFile(TempFile,'',FileDriverDateTime,FileSaveDateTime) then
;
DeleteFile(TempFile);
finally
end;
end;
end;
end;
finally
FindClose(SearchRec);
end;
end;
end;
把我的代码去掉就是了。
推荐Win32API的
FindFirstFile
FindNextFile
支持64位文件大小的(LargeInteger)
var
FindResult: integer;
FSearchRec, DSearchRec: TSearchRec;
function IsDirNotation(ADirName: string): Boolean;
begin
Result := ((ADirName = '.') or (ADirName = '..'));
end;
begin
if APath[Length(APath)] <> '\' then
APath := APath + '\';
FindResult := FindFirst(APath + AFile, faAnyFile +
faHidden +faSysFile + faReadOnly,
FSearchRec); //在根目录中查找指定文件
try
while FindResult = 0 do
begin
FileList.Add(APath + FSearchRec.Name);
FindResult := FindNext(FSearchRec); // 查找下一个指定文件
end;
//进入当前目录的子目录继续查找
FindResult := FindFirst(APath + '*.*', faDirectory, DSearchRec);
while FindResult = 0 do
begin
if ((DSearchRec.Attr and faDirectory) = faDirectory) and
not IsDirNotation(DSearchRec.Name) then
//递归调用FindFiles函数
FindFiles(APath + DSearchRec.Name, AFile,FileList);
FindResult := FindNext(DSearchRec);
end; finally
FindClose(FSearchRec);
end;end;