You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Inno Setup中如何比较路径字符串 是否有内置实现方案?

结论

Inno Setup Pascal 没有直接用于路径字符串比较的内置单函数,但可以通过路径规范化+字符串不区分大小写比较的组合方案实现,完全满足你列出的所有要求。

实现原理

直接复用 Inno Setup 内置的路径处理工具函数即可完成规范化,无需手动编写复杂的路径解析逻辑:

  • ExpandFileName():纯逻辑层面完成路径标准化,不需要路径真实存在,自动完成以下处理:
    • 将所有/替换为Windows标准路径分隔符\
    • 折叠连续的多个\为单个分隔符
    • 自动解析相对路径标记.和..
  • RemoveBackslash():去掉路径末尾的分隔符,避免目录路径因末尾有无斜杠产生对比差异
  • SameText():按照Windows路径不区分大小写的规则对比规范化后的字符串

代码实现

function ArePathsEqual(Path1, Path2: string; BasePath: string = ''): Boolean;
var
  Normalized1, Normalized2: string;
begin
  // 传入基准路径时,自动将相对路径转换为绝对路径再处理
  if BasePath <> '' then
  begin
    Path1 := ExpandFileName(AddBackslash(BasePath) + Path1);
    Path2 := ExpandFileName(AddBackslash(BasePath) + Path2);
  end;

  // 完成路径规范化
  Normalized1 := ExpandFileName(Path1);
  Normalized2 := ExpandFileName(Path2);

  // 统一去掉末尾分隔符
  Normalized1 := RemoveBackslash(Normalized1);
  Normalized2 := RemoveBackslash(Normalized2);

  // 不区分大小写对比
  Result := SameText(Normalized1, Normalized2);
end;

使用说明

  • 对比两个绝对路径:直接传两个路径参数即可,例如ArePathsEqual('C:\foo/bar\\', 'C:/foo\bar')返回True
  • 对比相对路径:传入基准路径作为第三个参数即可,例如对比相对安装目录的路径时,传{app}作为基准路径:ArePathsEqual('foo\..\bar', 'bar', ExpandConstant('{app}'))返回True

内容的提问来源于stack exchange,提问作者Zeus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:24:04