在文件夹中搜索大量特定文件名
Searching for a big amount of specific filenames inside a folder
我有一个包含很多文件的文件夹,即:
C:\Tmp\Input\random00001.txt
C:\Tmp\Input\random00002.txt
C:\Tmp\Input\random00003.txt
...
C:\Tmp\Input\random10000.txt
我有一个大列表(大约 two/three 一百个)我需要复制到另一个文件夹的特定文件名,即:
random00002.txt
random00009.txt
random04001.txt
...
random90000.txt
我尝试使用 windows 搜索,使用 OR
关键字分隔文件名,但文件太多,它会切断过滤器字符串...
我也尝试编写一个允许使用过滤器复制文件的函数,但它似乎不适用于 OR
关键字
uses
SysUtils, IOUtils;
procedure CopyFiles(const AInputPath : string; const AOutputPath : string; const AFilter : string = '*.*');
var
Found : boolean;
Res: TSearchRec;
begin
Found := (FindFirst(AInputPath + AFilter, faAnyFile, Res) = 0);
while(Found) do
begin
if((Res.Attr AND faDirectory = 0) AND (Res.Name <> '.') AND (Res.Name <> '..')) then
begin
TFile.Copy(AInputPath + Res.Name, AOutputPath + Res.Name);
end;
Found := (FindNext(Res) = 0);
end;
FindClose(Res);
end;
如果你有一个名字列表要复制,检查当前名字是否属于这个列表就足够了
if((Res.Attr AND faDirectory = 0) AND (Res.Name <> '.') AND (Res.Name <> '..')) then
begin
if Res.Name in Names then
TFile.Copy(AInputPath + Res.Name, AOutputPath + Res.Name);
end;
if Res.Name in Names
的实施取决于细节 - 名称可能是 Dictionary、StringList、已排序的等等((您没有指定细节)
我有一个包含很多文件的文件夹,即:
C:\Tmp\Input\random00001.txt
C:\Tmp\Input\random00002.txt
C:\Tmp\Input\random00003.txt
...
C:\Tmp\Input\random10000.txt
我有一个大列表(大约 two/three 一百个)我需要复制到另一个文件夹的特定文件名,即:
random00002.txt
random00009.txt
random04001.txt
...
random90000.txt
我尝试使用 windows 搜索,使用 OR
关键字分隔文件名,但文件太多,它会切断过滤器字符串...
我也尝试编写一个允许使用过滤器复制文件的函数,但它似乎不适用于 OR
关键字
uses
SysUtils, IOUtils;
procedure CopyFiles(const AInputPath : string; const AOutputPath : string; const AFilter : string = '*.*');
var
Found : boolean;
Res: TSearchRec;
begin
Found := (FindFirst(AInputPath + AFilter, faAnyFile, Res) = 0);
while(Found) do
begin
if((Res.Attr AND faDirectory = 0) AND (Res.Name <> '.') AND (Res.Name <> '..')) then
begin
TFile.Copy(AInputPath + Res.Name, AOutputPath + Res.Name);
end;
Found := (FindNext(Res) = 0);
end;
FindClose(Res);
end;
如果你有一个名字列表要复制,检查当前名字是否属于这个列表就足够了
if((Res.Attr AND faDirectory = 0) AND (Res.Name <> '.') AND (Res.Name <> '..')) then
begin
if Res.Name in Names then
TFile.Copy(AInputPath + Res.Name, AOutputPath + Res.Name);
end;
if Res.Name in Names
的实施取决于细节 - 名称可能是 Dictionary、StringList、已排序的等等((您没有指定细节)