Inno Setup - 检查是否存在多个文件夹

时间:2017-05-31 00:51:44

标签: inno-setup pascal pascalscript

我有一个自定义卸载页面,使用以下行调用:

UninstallProgressForm.InnerNotebook.ActivePage := UninstallConfigsPage;

现在,这只是每次运行卸载程序时显示页面,但我只需要显示某些文件夹是否存在(其中有6个)。我可以用一堆if来发表or声明,但我想知道是否有更简洁的方法来做这件事。

1 个答案:

答案 0 :(得分:2)

一般来说,没有比为每个文件夹调用DirExists更好的方法了:

if DirExists('C:\path1') or
   DirExists('C:\path2') or
   DirExists('C:\path3') then
begin
  { ... }
end;

但是,在处理一组文件/文件夹时,建议将其列表存储在某个容器(如TStringListarray of string)中,以允许其(重复)批量处理 - 处理。您已经拥有my solution to your other questionDirs: TStringList

var
  Dirs: TStringList;
begin
  Dirs := TStringList.Create();
  Dirs.Add('C:\path1');
  Dirs.Add('C:\path2');
  Dirs.Add('C:\path2');
end;
function AnyDirExists(Dirs: TStringList): Boolean;
var
  I: Integer;
begin
  for I := 0 to Dirs.Count - 1 do
  begin
    if DirExists(Dirs[I]) then
    begin
      Result := True;
      Exit;
    end;
  end;

  Result := False;
end;

但我从your other question知道,您将所有路径映射到复选框。因此,您需要做的就是检查是否有任何复选框:

if CheckListBox.Items.Count > 0 then
begin
  UninstallProgressForm.InnerNotebook.ActivePage := UninstallConfigssPage;

  { ... }

  if UninstallProgressForm.ShowModal = mrCancel then Abort;

  { ... }

  UninstallProgressForm.InnerNotebook.ActivePage := UninstallProgressForm.InstallingPage;
end;