Inno Setup - 检查是否存在多个文件夹
Inno Setup - Check if multiple folders exist
我有一个自定义卸载页面,它是通过以下行调用的:
UninstallProgressForm.InnerNotebook.ActivePage := UninstallConfigsPage;
现在,这只会在每次卸载程序 运行 时显示该页面,但我需要它仅在某些文件夹存在时显示(其中有 6 个)。我可以用一堆 or
做一个 if
声明,但我想知道是否有更简洁的方法来做到这一点。
一般来说,没有比为每个文件夹调用 DirExists
更好的方法了:
if DirExists('C:\path1') or
DirExists('C:\path2') or
DirExists('C:\path3') then
begin
{ ... }
end;
不过,在处理一组 files/folders 时,建议将它们的列表存储在某个容器中(例如 TStringList
or array of string
), to allow their (repeated) bulk-processing. You already have that (Dirs: TStringList
) from .
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;
但我从 得知,您将所有路径映射到复选框。因此,您需要做的就是检查是否有任何复选框:
if CheckListBox.Items.Count > 0 then
begin
UninstallProgressForm.InnerNotebook.ActivePage := UninstallConfigssPage;
{ ... }
if UninstallProgressForm.ShowModal = mrCancel then Abort;
{ ... }
UninstallProgressForm.InnerNotebook.ActivePage := UninstallProgressForm.InstallingPage;
end;
我有一个自定义卸载页面,它是通过以下行调用的:
UninstallProgressForm.InnerNotebook.ActivePage := UninstallConfigsPage;
现在,这只会在每次卸载程序 运行 时显示该页面,但我需要它仅在某些文件夹存在时显示(其中有 6 个)。我可以用一堆 or
做一个 if
声明,但我想知道是否有更简洁的方法来做到这一点。
一般来说,没有比为每个文件夹调用 DirExists
更好的方法了:
if DirExists('C:\path1') or
DirExists('C:\path2') or
DirExists('C:\path3') then
begin
{ ... }
end;
不过,在处理一组 files/folders 时,建议将它们的列表存储在某个容器中(例如 TStringList
or array of string
), to allow their (repeated) bulk-processing. You already have that (Dirs: TStringList
) from
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;
但我从
if CheckListBox.Items.Count > 0 then
begin
UninstallProgressForm.InnerNotebook.ActivePage := UninstallConfigssPage;
{ ... }
if UninstallProgressForm.ShowModal = mrCancel then Abort;
{ ... }
UninstallProgressForm.InnerNotebook.ActivePage := UninstallProgressForm.InstallingPage;
end;