如何使用通配符测试Inno Setup中是否存在文件

And*_*oom 7 inno-setup

是否可以使用FileExistsFileSearch(或任何其他Pascal函数)来确定给定文件夹中是否存在文件模式?

例如:

if (FileExists('c:\folder\*.txt') = True) then
Run Code Online (Sandbox Code Playgroud)

TLa*_*ama 5

目前,没有任何函数可以支持通配符来检查某个文件是否存在.那是因为两者FileExistsFileSearch函数都在内部使用NewFileExists函数,正如源代码中的注释所述,它不支持通配符.

幸运的是,FindFirst它支持通配符,因此您可以为您的任务编写如下函数:

[Code]
function FileExistsWildcard(const FileName: string): Boolean;
var
  FindRec: TFindRec;
begin
  Result := False;
  if FindFirst(FileName, FindRec) then
  try
    Result := FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0;
  finally
    FindClose(FindRec);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

它的用法与FileExists函数相同,只是你可以使用通配符进行搜索,如描述函数lpFileName参数的MSDN参考FindFirstFile.因此,要检查目录中是否有带txt扩展名的文件,C:\Folder您可以通过以下方式调用上述函数:

if FileExistsWildcard('C:\Folder\*.txt') then
  MsgBox('There is a *.txt file in the C:\Folder\', mbInformation, MB_OK);
Run Code Online (Sandbox Code Playgroud)

当然,要搜索的文件名可能包含文件的部分名称,例如:

if FileExistsWildcard('C:\Folder\File*.txt') then
  MsgBox('There is a File*.txt file in the C:\Folder\', mbInformation, MB_OK);
Run Code Online (Sandbox Code Playgroud)

这种模式将匹配文件,例如C:\Folder\File12345.txt.