var FFileName: string; function GetDirectoryName(Dir: String): String; begin if Dir[Length(Dir)]<> '\' then Result := Dir+'\' else Result := Dir; end;procedure FindFiles(APath: String); var FSearchRec, DSearchRec: TSearchRec; FindResult: integer; 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 form1.memo1.lines.add(LowerCase(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(APath+DSearchRec.Name); FindResult := FindNext(DSearchRec); end; finally FindClose(FSearchRec); end; end;procedure TForm1.Button1Click(Sender: TObject); begin FFileName:='*.txt'; FindFiles('d:\'); end;
大概需要用到以下代码//--递归查找文件 procedure GetFile(PathName: string;var strings:TStrings); var FindData:TWin32FindData; hf:THandle; b:boolean; tmpstr:string; tempFolder:string; str:string; begin hf:= Windows.FindFirstFile(PChar(PathName+'\*.*'),FindData); if hf = INVALID_HANDLE_VALUE then exit; b:= true; while b do begin if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY)= 0 then begin str:=string(FindData.cFileName); //将找到的文件添加到tstring中,你可以过滤一下txt文件 strings.Add( PathName+'\'+str ); end else begin tmpstr:= FindData.cFileName+''; if (tmpstr <> '.') and (tmpstr<>'..')then begin tempFolder:=tempFolder+string(FindData.cFileName)+'\'; GetFile(PathName+'\'+FindData.cFileName,strings); end; end; b:= windows.FindNextFile(hf,FindData); end; end;//---调用上面的查找文件过程 var strings:TStrings; begin strings:=TStringList.Create; getFile('c"\123',strings); //--...... strings.free; end;//----在memo中显示文本文件 memo1.lines.loadfromfile('c:\123.txt');
1楼的代码只是遍历文件,将文件名写在memo中,打开文件你自己写吧
procedure rSerach(const Directory: TFileName); var SearchRec:TSearchRec; ShortName,FullName:string; begin if FindFirst(Directory + '*',faAnyFile and not faVolumeID,SearchRec) = 0 then begin try repeat if SearchRec.FindData.cAlternateFileName[0] = #0 then ShortName := SearchRec.Name else ShortName := SearchRec.FindData.cAlternateFileName; FullName := Directory+SearchRec.FindData.cFileName;//Directory + ShortName; if (SearchRec.Attr and faDirectory) <> 0 then begin if (ShortName <> '.') and (ShortName <> '..') then rSerach(FullName + '\'); end else begin if UpperCase(ExpandFileExt(FullName))='TXT' then begin try .......// except Continue; end; end; end; until FindNext(SearchRec)<>0; except FindClose(SearchRec); raise; end; FindClose(SearchRec); end; end;
var
FFileName: string;
function GetDirectoryName(Dir: String): String;
begin
if Dir[Length(Dir)]<> '\' then
Result := Dir+'\'
else
Result := Dir;
end;procedure FindFiles(APath: String);
var
FSearchRec,
DSearchRec: TSearchRec;
FindResult: integer; 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
form1.memo1.lines.add(LowerCase(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(APath+DSearchRec.Name);
FindResult := FindNext(DSearchRec);
end;
finally
FindClose(FSearchRec);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
FFileName:='*.txt';
FindFiles('d:\');
end;
procedure GetFile(PathName: string;var strings:TStrings);
var
FindData:TWin32FindData;
hf:THandle;
b:boolean;
tmpstr:string;
tempFolder:string;
str:string;
begin
hf:= Windows.FindFirstFile(PChar(PathName+'\*.*'),FindData);
if hf = INVALID_HANDLE_VALUE then exit;
b:= true;
while b do
begin
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY)= 0 then
begin
str:=string(FindData.cFileName);
//将找到的文件添加到tstring中,你可以过滤一下txt文件
strings.Add( PathName+'\'+str );
end
else
begin
tmpstr:= FindData.cFileName+'';
if (tmpstr <> '.') and (tmpstr<>'..')then
begin
tempFolder:=tempFolder+string(FindData.cFileName)+'\';
GetFile(PathName+'\'+FindData.cFileName,strings);
end;
end;
b:= windows.FindNextFile(hf,FindData);
end;
end;//---调用上面的查找文件过程
var
strings:TStrings;
begin
strings:=TStringList.Create;
getFile('c"\123',strings);
//--......
strings.free;
end;//----在memo中显示文本文件
memo1.lines.loadfromfile('c:\123.txt');
procedure rSerach(const Directory: TFileName);
var
SearchRec:TSearchRec;
ShortName,FullName:string;
begin
if FindFirst(Directory + '*',faAnyFile and not faVolumeID,SearchRec) = 0 then begin
try
repeat
if SearchRec.FindData.cAlternateFileName[0] = #0 then
ShortName := SearchRec.Name
else
ShortName := SearchRec.FindData.cAlternateFileName;
FullName := Directory+SearchRec.FindData.cFileName;//Directory + ShortName;
if (SearchRec.Attr and faDirectory) <> 0 then
begin
if (ShortName <> '.') and (ShortName <> '..') then
rSerach(FullName + '\');
end
else
begin
if UpperCase(ExpandFileExt(FullName))='TXT' then
begin
try
.......//
except
Continue;
end;
end;
end;
until FindNext(SearchRec)<>0;
except
FindClose(SearchRec);
raise;
end;
FindClose(SearchRec);
end;
end;