Ive*_*aev 11 c++ qt qt4 path path-separator
我需要一个类似于.NET的方法来安全地组合路径部分,而不必担心路径分隔符的平台细节.
在QT4中有这样的类和方法吗?
就像是:
QPath::Combine
Run Code Online (Sandbox Code Playgroud)
Adr*_*tti 32
没有任何功能可以直接替换,Path.Combine()因此您必须自己编写.
你可以用艰难的方式(自己处理一切)或者只是使用QDir::cleanPath():
QString pathAppend(const QString& path1, const QString& path2)
{
return QDir::cleanPath(path1 + QDir::separator() + path2);
}
Run Code Online (Sandbox Code Playgroud)
我使用过,QDir::separator()但正如跨平台的方式用Qt构建FS路径所指出的那样,你真的不需要它而你只需要使用它/.QDir::cleanPath()将删除double /(或double \,根据QDir::separator())并将解析.和..适当的值.另请参阅Qt等效的PathAppend?有关QT PathAppend()替换的代码.
如上所述,它模仿PathAppend()本机函数(请参阅MSDN),但这不是一个确切的替代,Path.Combine()因为Path.Combine()不执行清理或规范化(它只是附加字符串,以正确的方式处理目录分隔符,请参阅MSDN).如果您需要一个确切的替代品,您可以使用这个:
QString pathCombine(const QString& path1, const QString& path2)
{
if (path2.startsWith(QDir::separator()))
return path2;
return trimEnd(path1, QDir::separator())
+ QDir::separator()
+ trim(path2, QDir::separator());
}
Run Code Online (Sandbox Code Playgroud)
如果path2是目录名,则此函数不会添加尾随目录分隔符(它不执行任何检查,甚至根本不存在路径).还要注意,path2必须是一个子路径path1(相对路径高于path1不支持,如果你需要它们你必须使用以前的版本QDir::cleanPath()),如果path2是root,则path2返回(这个实现非常幼稚,例如它不会检测 c:\directory为根路径).
trim()和trimEnd()函数删除尾随目录分隔符(对于可能的通用实现,请参阅如何从QString中删除尾随空格?作为起点).算法,以确保有中同一个描述尾随目录分隔如何确保有尾随目录分隔的路径?(简化,因为这里我们总是有一个目录分隔符QDir::separator()).
| 归档时间: |
|
| 查看次数: |
12102 次 |
| 最近记录: |