gpt4 book ai didi

delphi - 如何使用 FindFirst 搜索不同的文件类型?

转载 作者:行者123 更新时间:2023-12-03 14:39:00 30 4
gpt4 key购买 nike

在我的应用程序中,我使用以下过程递归扫描任何文件夹和子文件夹,如果该文件夹包含文本文件 (*.txt),我会将文件名添加到我的过程中定义的 TStringList:

procedure FileSearch(const PathName: string; var lstFiles: TStringList);
const
FileMask = '*.txt';
var
Rec: TSearchRec;
Path: string;
begin
Path := IncludeTrailingBackslash(PathName);
if FindFirst(Path + FileMask, faAnyFile - faDirectory, Rec) = 0 then
try
repeat
lstFiles.Add(Path + Rec.Name);
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;

if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
try
repeat
if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name <> '.') and
(Rec.Name <> '..') then
FileSearch(Path + Rec.Name, lstFiles);
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;
end;

一切都很完美,但我希望能够搜索多个文件扩展名。我尝试修改 FileMask 来执行此操作,但每次它都没有返回任何内容,可能是因为它正在寻找无效的扩展名。我已经尝试了以下每一项,但没有运气:(显然一次尝试一个,我没有在我的程序中将以下行写了 3 次)

FileMask = '*.txt|*.rtf|*.doc';

FileMask = '*.txt;*.rtf;*.doc';

FileMask = '*.txt,*.rtf,*.doc';

我觉得问这个问题很愚蠢,但是如何允许在搜索中包含额外的文件扩展名?我可以对“打开”和“保存”对话框执行此操作,为什么不能在此处分离扩展?

谢谢。

克雷格。

最佳答案

更改您的函数,使其也接受扩展名列表,并用分号或其他分隔符分隔。然后,您可以检查该扩展名列表中是否存在每个找到的文件的扩展名,如果找到,请将其添加到您的字符串列表中。

这样的事情应该有效:

procedure FileSearch(const PathName: string; const Extensions: string;
var lstFiles: TStringList);
const
FileMask = '*.*';
var
Rec: TSearchRec;
Path: string;
begin
Path := IncludeTrailingBackslash(PathName);
if FindFirst(Path + FileMask, faAnyFile - faDirectory, Rec) = 0 then
try
repeat
if AnsiPos(ExtractFileExt(Rec.Name), Extensions) > 0 then
lstFiles.Add(Path + Rec.Name);
until FindNext(Rec) <> 0;
finally
SysUtils.FindClose(Rec);
end;

if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
try
repeat
if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name <> '.') and
(Rec.Name <> '..') then
FileSearch(Path + Rec.Name, Extensions, lstFiles);
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;
end;

调用示例:

FileSearch('C:\Temp', '.txt;.tmp;.exe;.doc', FileList);

关于delphi - 如何使用 FindFirst 搜索不同的文件类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5991040/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com