【问题标题】:Qt equivalent of PathAppend?Qt 相当于 PathAppend?
【发布时间】:2012-10-12 10:09:07
【问题描述】:

PathAppend 是一个有用的 winapi 函数,可让您将一条路径附加到另一条路径,同时处理任何尾随反斜杠(或缺少它们)。

意味着将"/dir1" 附加到"dir2",或将"/dir1" 附加到"/dir2",或将"/dir1/" 附加到"/dir2" 将产生相同(正确)的结果 - "/dir1/dir2"(而简单的连接将分别产生"/dir1dir2""/dir1/dir2""/dir1//dir2")。

有没有做类似事情的 Qt 函数?

【问题讨论】:

标签: c++ qt


【解决方案1】:

没有那个功能,但QDir::cleanPath() 会处理你需要的一切,你只需要连接路径:

QString appendPath(const QString& path1, const QString& path2)
{
    return QDir::cleanPath(path1 + QDir::separator() + path2);
}

我使用QDir::separator() 代替原始的“/”,但这不是强制性的,因为 QT 在内部将该分隔符转换为本地分隔符(如果需要,请参阅 Cross-platform way of constructing an FS path with Qt)。

请注意(对于具有 .NET 背景的人)还有另一个类似的功能:Path.Combine(),它的行为与PathAppend() 有某种相似,但它有所不同。请参阅Is there a QPath::Combine()? 了解其行为的 QT 仿真(以及更详细地概述它们的差异)。

【讨论】:

  • 我后来意识到我所知道的所有操作系统都支持多个斜杠。所以////usr////binC:////Program FilesC:\\\\\\Program Files,甚至C:\\\/\//\Program Files 都会正确解析。所以你可以毫无顾忌地连接path1+"/"+path2
  • @sashoalm 是的,对于大多数操作系统来说,双打不是问题,但 cleanPath() 的作用远不止于此(另请参阅链接的帖子)。为了模仿 PathAppend() 它有 resolve 路径。如果您需要简单地连接两个 simple 路径作为读/写函数的输入,那么您可能会对连接感到满意。如果您将计算路径用于其他东西或相对部分更复杂,那么您最好也对其进行规范化/清理(老实说,在调试时也是为了您自己的缘故......)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多