if FindFirst(GetPath(Parent) + '\*.*', faAnyFile, F) = 0 then begin repeat if (F.Name <> '.') and (F.Name <> '..') then continue;//此句会被编译器屏蔽,搞得我整个D盘数据都被删了! until FindNext(F) <> 0; FindClose(F);
//下面的代码也许对你有帮助 procedure TMainForm.FindFiles(APath: String); var FSearchRec, DSearchRec: TSearchRec; FindResult: integer; // fData:WIN32_FIND_DATA; function IsDirNotation(ADirName: String): Boolean; begin Result := (ADirName = '.') or (ADirName = '..'); end;begin APath := GetDirectoryName(APath); FindResult := FindFirst(APath+FFileName,faAnyFile+faHidden+ faSysFile+faReadOnly,FSearchRec); try while FindResult = 0 do begin ExtractFileExt(StrPas(FSearchRec.FindData.cFileName)); lbFiles.Items.Add(LowerCase(APath+FSearchRec.Name)); FindInfoInfiles(APath+FSearchRec.Name,edtFileInfo.Text); 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 begin FindFiles(APath+DSearchRec.Name); // Recursion here end; FindResult := FindNext(DSearchRec); end; finally FindClose(FSearchRec); end; end;
procedure TMainForm.FindFiles(APath: String);
var
FSearchRec,
DSearchRec: TSearchRec;
FindResult: integer;
// fData:WIN32_FIND_DATA;
function IsDirNotation(ADirName: String): Boolean;
begin
Result := (ADirName = '.') or (ADirName = '..');
end;begin
APath := GetDirectoryName(APath);
FindResult := FindFirst(APath+FFileName,faAnyFile+faHidden+
faSysFile+faReadOnly,FSearchRec);
try
while FindResult = 0 do
begin
ExtractFileExt(StrPas(FSearchRec.FindData.cFileName));
lbFiles.Items.Add(LowerCase(APath+FSearchRec.Name));
FindInfoInfiles(APath+FSearchRec.Name,edtFileInfo.Text);
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
begin
FindFiles(APath+DSearchRec.Name); // Recursion here
end;
FindResult := FindNext(DSearchRec);
end;
finally
FindClose(FSearchRec);
end;
end;