我需要一种类似于 .NET 的方法来安全地组合路径部分,而不必担心路径分隔符的平台细节。
QT4中有这样的类和方法吗?
就像是:
QPath::Combine
我需要一种类似于 .NET 的方法来安全地组合路径部分,而不必担心路径分隔符的平台细节。
QT4中有这样的类和方法吗?
就像是:
QPath::Combine
没有任何函数可以直接替代,Path.Combine()
所以你必须自己编写。
您可能会以艰难的方式(自己处理所有事情)或简单地使用QDir::cleanPath()
:
QString pathAppend(const QString& path1, const QString& path2)
{
return QDir::cleanPath(path1 + QDir::separator() + path2);
}
我使用过,但正如在使用 Qt 构建 FS 路径的跨平台方式中QDir::separator()
指出的那样,您并不真正需要它,您只需使用. 将删除 double (或 double ,根据)并将解析和到适当的值。另请参阅Qt 等效的 PathAppend?有关 QT替换的代码。/QDir::cleanPath()
/\QDir::separator()
...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());
}
如果是目录名,此函数将不会添加尾随目录分隔符path2
(它不执行任何检查,甚至路径可能根本不存在)。另请注意,必须是(不支持的相对路径高于,如果需要它们,则必须使用以前的版本)path2
的子路径,如果是根则返回(此实现非常幼稚,例如它不检测为根路径)。path1
path1
QDir::cleanPath()
path2
path2
c:\directory
trim()
and trimEnd()
functions remove trailing directory separator (for a possible, generic, implementation see How do I remove trailing whitespace from a QString? as starting point). Algorithm to ensure there is a trailing directory separator is same one described in How to ensure there is trailing directory separator in paths? (simplified because here we always have one directory separator given by QDir::separator()
).
您可以使用静态方法QDir::fromNativeSeparators
,QDir::toNativeSeparators
然后/
在操作路径时在任何地方使用。
我不知道有什么完全一样的,但你可以通过使用来接近QDir::cd()
:
QDir path("base_path");
path.cd("subdir");
不幸的是,我认为这只适用于目录,而不适用于文件。对于文件,您可以使用QDir::filePath()
:
QDir path("base_path");
QString file_path = path.filePath("file.txt");