パスセパレーターのプラットフォーム固有を気にせずにパスパーツを安全に結合するには、.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 )を削除し、とを適切な値に解決します。PathAppend に相当する Qtも参照してください。QTの交換に関するコード。/QDir::cleanPath()
/\QDir::separator()
...PathAppend()
前述のように、PathAppend()
ネイティブ機能を模倣していますが ( MSDNを参照)、これはの正確な置き換えではありません。クリーニングや正規化を実行しないPath.Combine()
ためです(文字列を追加し、ディレクトリ セパレータを適切な方法で処理するだけです。MSDNを参照してください)。正確な交換が必要な場合は、次のものを使用できます。Path.Combine()
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()
およびtrimEnd()
関数は末尾のディレクトリ区切り文字を削除します (可能性のある一般的な実装については、開始点としてQString から末尾の空白を削除するにはどうすればよいですか? を参照してください)。末尾のディレクトリセパレーターがあることを確認するアルゴリズムは、パスに末尾のディレクトリセパレーターがあることを確認する方法で説明されているものと同じです? (ここでは、常に 1 つのディレクトリ セパレーターが指定されているため、単純化されています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");