Es keine Funktion ist, die als direkter Ersatz verwendet werden kann für Path.Combine()
so müssen Sie es von Ihrem eigenen schreiben.
Sie können es in der harten Art und Weise tun (Umgang mit alles selbst) oder verwenden Sie einfach QDir::cleanPath()
:
QString pathAppend(const QString& path1, const QString& path2)
{
return QDir::cleanPath(path1 + QDir::separator() + path2);
}
I QDir::separator()
verwendet, aber wie in Cross-platform way of constructing a FS path with Qt Sie nicht wirklich brauchen sie wies darauf hin, und Sie können einfach verwenden die /. QDir::cleanPath()
entfernt doppelte / (oder doppelte \, nach QDir::separator()
) und löst . und .. zu den entsprechenden Werten. Siehe auch Qt equivalent of PathAppend? für Code über QT PathAppend()
Ersatz.
Wie gesagt, es ahmt PathAppend()
native Funktion (siehe MSDN), aber dies ist kein exakter Ersatz von Path.Combine()
weil Path.Combine()
keine Reinigung oder Normalisierung nicht durchführt (es nur Zeichenfolge anfügt, Verzeichnis-Separatoren in den richtigen Handhabung Weg, siehe MSDN). Wenn Sie einen genauen Ersatz Sie dies verwenden können ein:
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());
}
Diese Funktion wird einen nachlauf Verzeichnisseparator nicht hinzufügen, wenn path2
ein Verzeichnisname ist (es führt keine Kontrolle und Pfad kann auch nicht existieren überhaupt). Beachten Sie außerdem, dass path2
ein Unterpfad von path1
sein muss (relative Pfade höher als path1
werden nicht unterstützt, wenn Sie sie benötigen, müssen Sie die vorherige Version mit QDir::cleanPath()
verwenden), auch wenn path2
verwurzelt ist, wird zurückgegeben (diese Implementierung ist ziemlich naiv, zum Beispiel ist es nicht erkennenc:\directory
als Root-Pfad).
trim()
und trimEnd()
Funktionen entfernen nachgestellten Verzeichnis Trennzeichen (für eine mögliche, generische, Implementierung siehe How do I remove trailing whitespace from a QString? als Startpunkt).Algorithmus um sicherzustellen, gibt es eine nachlaufende Verzeichnis Trennzeichen ist die gleiche in How to ensure there is trailing directory separator in paths? beschrieben (vereinfacht, weil hier immer ein Verzeichnis Trennzeichen durch QDir::separator()
gegeben haben).
Bitte ändern Sie die akzeptierte Antwort (siehe Kommentar zu 'cd()' Ausführen einer Existenzprüfung) – Andy