QFileInfo::dir()だけじゃない!Qtで親ディレクトリを扱う代替メソッドを徹底解説

2025-05-31

QFileInfo::dir() とは

QFileInfo::dir()関数は、QFileInfoオブジェクトが表すファイルまたはディレクトリの親ディレクトリQDirオブジェクトとして返します。

QFileInfoクラスは、ファイル名、パス、アクセス権限、ファイルの種類(ファイル、ディレクトリ、シンボリックリンクなど)といった、システムに依存しないファイル情報を提供します。

QFileInfo::dir() の使い方と特徴

  1. 戻り値の型: QDirオブジェクトを返します。QDirオブジェクトは、ディレクトリを操作するための機能(ディレクトリ内のファイル一覧の取得、ディレクトリの作成・削除など)を提供します。

  2. 対象がファイルの場合:

    • 例えば、QFileInfoオブジェクトが /home/user/document/report.txt というファイルを指している場合、dir()/home/user/document を表すQDirオブジェクトを返します。
  3. 対象がディレクトリの場合:

    • ここが重要です。 QFileInfoオブジェクトが /home/user/document というディレクトリ自体を指している場合でも、dir() はそのディレクトリの親ディレクトリである /home/user を表すQDirオブジェクトを返します。つまり、QFileInfo::dir() は、常に「1つ上の階層のディレクトリ」を返す動作をします。
  4. 引数 absPath:

    • QDir QFileInfo::dir(bool absPath = false) const のように、オプションで absPath というbool型の引数を取ることができます。
    • absPathtrue に設定すると、返されるQDirオブジェクトは常に絶対パスを表すようになります。
    • absPathfalse (デフォルト) に設定すると、元のQFileInfoオブジェクトが相対パスであれば相対パス、絶対パスであれば絶対パスのQDirオブジェクトが返されます。
#include <QCoreApplication>
#include <QFileInfo>
#include <QDir>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // ファイルの例
    QFileInfo fileInfo1("/home/user/documents/report.txt"); // 仮のパス
    QDir parentDir1 = fileInfo1.dir();
    qDebug() << "ファイルの場合:";
    qDebug() << "  QFileInfo:" << fileInfo1.filePath();
    qDebug() << "  親ディレクトリ (QDir):" << parentDir1.path(); // 出力: /home/user/documents

    // ディレクトリの例
    QFileInfo fileInfo2("/home/user/projects/my_project"); // 仮のパス
    QDir parentDir2 = fileInfo2.dir();
    qDebug() << "\nディレクトリの場合:";
    qDebug() << "  QFileInfo:" << fileInfo2.filePath();
    qDebug() << "  親ディレクトリ (QDir):" << parentDir2.path(); // 出力: /home/user/projects

    // ルートディレクトリの場合
    QFileInfo fileInfo3("/"); // ルートディレクトリ
    QDir parentDir3 = fileInfo3.dir();
    qDebug() << "\nルートディレクトリの場合:";
    qDebug() << "  QFileInfo:" << fileInfo3.filePath();
    qDebug() << "  親ディレクトリ (QDir):" << parentDir3.path(); // 出力: "" (空文字列、またはシステム依存のルートの親)

    // 相対パスの例
    QFileInfo fileInfo4("my_folder/my_file.txt");
    QDir parentDir4 = fileInfo4.dir();
    qDebug() << "\n相対パスの場合:";
    qDebug() << "  QFileInfo:" << fileInfo4.filePath();
    qDebug() << "  親ディレクトリ (QDir):" << parentDir4.path(); // 出力: my_folder

    // 絶対パスを指定して親ディレクトリを取得する例
    QFileInfo fileInfo5("my_folder/another_file.txt");
    QDir absoluteParentDir = fileInfo5.dir(true); // 絶対パスで取得
    qDebug() << "\n絶対パスで親ディレクトリを取得する例:";
    qDebug() << "  QFileInfo:" << fileInfo5.filePath();
    qDebug() << "  絶対パスの親ディレクトリ (QDir):" << absoluteParentDir.path(); // 環境によって /current/working/directory/my_folder のように変わる

    return a.exec();
}


QFileInfo::dir() に関するよくあるエラーとトラブルシューティング

QFileInfo::dir() は非常に便利な関数ですが、その動作を完全に理解していないと予期せぬ結果につながることがあります。

ディレクトリ自身のQDirオブジェクトを取得したいのに、親ディレクトリが返される

エラーの状況
QFileInfoオブジェクトがディレクトリ(例: /home/user/my_folder)を指しているときに、そのディレクトリ自体を表すQDirオブジェクトが欲しいとします。しかし、QFileInfo::dir()を使うと、my_folderではなく、その親ディレクトリである/home/userが返ってきてしまう。これはQFileInfo::dir()の仕様なので、エラーというよりはよくある誤解です。

原因
QFileInfo::dir()は、常にQFileInfoオブジェクトが表す「ファイルやディレクトリの親ディレクトリ」を返します。これがこの関数の設計意図です。

トラブルシューティング/解決策
QFileInfoがディレクトリを指している場合に、そのディレクトリ自体をQDirオブジェクトとして取得したい場合は、QDirのコンストラクタにQFileInfo::filePath()の値を渡すのが最も簡単で正しい方法です。

QFileInfo dirInfo("/home/user/my_folder"); // これはディレクトリを指すQFileInfo
QDir myDir = dirInfo.dir(); // これは /home/user を返す

// 正しい方法: QFileInfoが表すディレクトリ自体をQDirとして取得
QDir actualDir(dirInfo.filePath());
qDebug() << "実際のディレクトリ:" << actualDir.path(); // 出力: /home/user/my_folder

ルートディレクトリの親ディレクトリを取得しようとすると空のパスが返される

エラーの状況
WindowsのC:/やUnix系の/のようなルートディレクトリを表すQFileInfoに対してdir()を呼び出すと、空のパス ("") またはプラットフォーム依存の動作となることがあります。

原因
ルートディレクトリにはそれ以上の親ディレクトリが存在しないため、QDirで表現できる有効な親パスが存在しません。

トラブルシューティング/解決策
ルートディレクトリのQFileInfoに対してdir()を呼び出す際には、戻り値が空である可能性があることを考慮し、適切にハンドリングする必要があります。通常、ルートディレクトリはそれ自体が最上位のディレクトリとして扱われるため、その親ディレクトリが必要となるケースは稀です。

QFileInfo rootInfo("/"); // Unix/Linuxの場合
QDir rootParent = rootInfo.dir();
qDebug() << "ルートディレクトリの親:" << rootParent.path(); // 出力: ""

QFileInfo driveRootInfo("C:/"); // Windowsの場合
QDir driveRootParent = driveRootInfo.dir();
qDebug() << "ドライブルートの親:" << driveRootParent.path(); // 出力: ""

相対パスが絶対パスとして扱われない、またはその逆

エラーの状況
QFileInfoオブジェクトが相対パスで初期化された場合、dir()で返されるQDirオブジェクトも相対パスになります。absPath = trueオプションを渡し忘れると、期待する絶対パスが得られないことがあります。

原因
QFileInfo::dir()のデフォルトの動作は、元のQFileInfoが相対パスであれば相対パスのQDirを、絶対パスであれば絶対パスのQDirを返すためです。絶対パスが必要な場合は、明示的にtrueを渡す必要があります。

トラブルシューティング/解決策
常に絶対パスのQDirオブジェクトが必要な場合は、QFileInfo::dir(true)を使用してください。

QFileInfo relativeFileInfo("data/config.ini");
QDir relativeParentDir = relativeFileInfo.dir(); // 相対パス: data
qDebug() << "相対パスの親 (デフォルト):" << relativeParentDir.path();

QDir absoluteParentDir = relativeFileInfo.dir(true); // 絶対パス
qDebug() << "相対パスの親 (絶対パスで取得):" << absoluteParentDir.path();
// 例: 現在の作業ディレクトリが /app の場合、出力は /app/data となる

また、QFileInfo::filePath()QFileInfo::absoluteFilePath()と組み合わせてQDirを構築することも有効です。

QFileInfo relativeFileInfo("data/config.ini");
QDir absoluteDirFromPath(relativeFileInfo.absolutePath());
qDebug() << "QFileInfo::absolutePath() からのQDir:" << absoluteDirFromPath.path();
// これは dir(true) と同じ結果になることが多いが、概念的に異なる場合がある(ファイル名を除くパス全体 vs 親ディレクトリ)

パスのセパレータの問題 (Windowsの\とUnixの/)

エラーの状況
Windows環境でパスに\(バックスラッシュ)を使用した場合、または異なるOS間でパスを扱う際に、セパレータの混在や不正確な処理によってパスが正しく認識されないことがあります。Qtは内部的に/を推奨していますが、Windowsの\も処理できます。

原因
手動でパス文字列を作成する際に、OS固有のセパレータに依存したり、エスケープシーケンスを誤って記述したりすると問題が発生します。

トラブルシューティング/解決策

  • QDir::fromNativeSeparators() の使用
    逆に、Qt内部で扱っているパスをOSネイティブな形式で表示する必要がある場合は、QDir::fromNativeSeparators() を使用します。
  • QDir::toNativeSeparators() の使用
    外部システムからパス文字列を取得する場合など、OS固有のセパレータを持つパスを扱う必要がある場合は、QDir::toNativeSeparators() を使ってQtが適切に処理できる形式に変換できます。
  • Qtの推奨に従う
    Qtではパスの区切り文字として常に/を使用することが推奨されています。これはWindowsでも問題なく機能します。
// Windows環境での例
QString windowsPath = "C:\\Users\\John\\Documents\\file.txt";
QFileInfo fi(windowsPath);
QDir dir = fi.dir();
qDebug() << "Windowsパスの親ディレクトリ:" << dir.path(); // C:/Users/John/Documents (Qtは自動的に / に変換)

// 明示的にネイティブセパレータに変換して表示する場合
qDebug() << "ネイティブセパレータ:" << QDir::toNativeSeparators(dir.path()); // C:\Users\John\Documents

QFileInfoオブジェクトが有効なファイル/ディレクトリを指していない

エラーの状況
QFileInfo::dir()を呼び出す前に、QFileInfoオブジェクトが実際にファイルシステム上の有効なパスを指しているかを確認しないと、予期しない動作や空のパスが返されることがあります。

原因
QFileInfoコンストラクタに渡されたパスが存在しない、または無効な場合、QFileInfoオブジェクトはその情報を持つことができません。

トラブルシューティング/解決策
QFileInfo::exists()QFileInfo::isFile()QFileInfo::isDir()などの関数を使用して、操作を行う前にパスの有効性を確認してください。

QString nonExistentPath = "/path/to/non_existent_file.txt";
QFileInfo fi(nonExistentPath);

if (!fi.exists()) {
    qWarning() << "ファイルまたはディレクトリが存在しません:" << fi.filePath();
    // ここで dir() を呼び出しても意味のある結果は得られない
} else {
    QDir parent = fi.dir();
    qDebug() << "親ディレクトリ:" << parent.path();
}
  • デバッグ出力の活用
    qDebug() を使って、パス文字列やQDirオブジェクトの中身を頻繁に出力し、期待通りの値になっているか確認することが、トラブルシューティングの基本です。
  • パスの正規化
    パスを扱う際には、QDir::cleanPath()QFileInfo::canonicalFilePath() を使用して、冗長なセパレータ(//)や ... などを含むパスを正規化すると、予測可能な動作になります。
  • ドキュメントを読む
    常にQtの公式ドキュメント(QFileInfo::dir()のページ)を参照し、関数の正確な動作と引数の意味を理解することが重要です。


QFileInfo::dir()は、QFileInfoオブジェクトが表すファイルやディレクトリの「親ディレクトリ」をQDirオブジェクトとして取得するために使用されます。

例1: ファイルの親ディレクトリを取得する

最も基本的な使用例です。ファイルパスが与えられたときに、それが存在するディレクトリのパスを取得します。

#include <QCoreApplication>
#include <QFileInfo>
#include <QDir>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 存在するファイルを仮定します
    // 実際には、このパスをあなたの環境に合わせて変更してください
    // 例: Windowsなら "C:/Users/YourUser/Documents/my_document.txt"
    // Linux/macOSなら "/home/youruser/documents/my_document.txt"
    QString filePath = "C:/QtProjects/MyApp/data/settings.ini";

    QFileInfo fileInfo(filePath);

    if (fileInfo.exists() && fileInfo.isFile()) {
        qDebug() << "対象ファイルパス:" << fileInfo.filePath();

        // QFileInfo::dir() を呼び出して、親ディレクトリのQDirオブジェクトを取得
        QDir parentDir = fileInfo.dir();

        qDebug() << "親ディレクトリのパス:" << parentDir.path();
        // 出力例: 親ディレクトリのパス: "C:/QtProjects/MyApp/data"

        // QDirオブジェクトを使って、さらに操作することも可能
        qDebug() << "親ディレクトリの名前:" << parentDir.dirName();
        // 出力例: 親ディレクトリの名前: "data"

        // 親ディレクトリ内のファイル一覧を取得
        qDebug() << "親ディレクトリ内のファイルとディレクトリ:";
        foreach (const QFileInfo &entry, parentDir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot)) {
            qDebug() << "  - " << entry.fileName();
        }

    } else {
        qDebug() << "指定されたファイルは存在しないか、ファイルではありません:" << filePath;
    }

    return a.exec();
}

解説

  1. QFileInfo fileInfo(filePath); で、指定されたファイルパスのQFileInfoオブジェクトを作成します。
  2. fileInfo.exists() && fileInfo.isFile() で、パスが実際に存在し、かつファイルであることを確認します。
  3. QDir parentDir = fileInfo.dir(); で、このファイルの親ディレクトリを表すQDirオブジェクトを取得します。
  4. parentDir.path() で、そのQDirオブジェクトが指すパス文字列を取得して出力します。

例2: ディレクトリの親ディレクトリを取得する (よくある誤解の解消)

ディレクトリのQFileInfoからdir()を呼び出すと、そのディレクトリ自体ではなく、その親ディレクトリが返されることを示します。

#include <QCoreApplication>
#include <QFileInfo>
#include <QDir>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 存在するディレクトリを仮定します
    // 実際には、このパスをあなたの環境に合わせて変更してください
    QString dirPath = "C:/QtProjects/MyApp/images";

    QFileInfo dirInfo(dirPath);

    if (dirInfo.exists() && dirInfo.isDir()) {
        qDebug() << "対象ディレクトリパス:" << dirInfo.filePath();

        // QFileInfo::dir() を呼び出して、親ディレクトリのQDirオブジェクトを取得
        QDir grandParentDir = dirInfo.dir();

        qDebug() << "QFileInfo::dir() で取得した親ディレクトリのパス:" << grandParentDir.path();
        // 出力例: QFileInfo::dir() で取得した親ディレクトリのパス: "C:/QtProjects/MyApp"
        // 注意: "images" 自体ではなく、その親である "MyApp" が返されます

        // もし "images" ディレクトリ自体をQDirオブジェクトとして取得したい場合
        QDir actualDir(dirInfo.filePath());
        qDebug() << "QDir(QFileInfo::filePath()) で取得したディレクトリのパス:" << actualDir.path();
        // 出力例: QDir(QFileInfo::filePath()) で取得したディレクトリのパス: "C:/QtProjects/MyApp/images"

    } else {
        qDebug() << "指定されたディレクトリは存在しないか、ディレクトリではありません:" << dirPath;
    }

    return a.exec();
}

解説

  1. dirInfo.isDir() で、パスがディレクトリであることを確認します。
  2. QFileInfo::dir() を呼び出すと、"C:/QtProjects/MyApp/images" の親である "C:/QtProjects/MyApp" が返されます。これはQFileInfo::dir()の設計上の動作です。
  3. もし"C:/QtProjects/MyApp/images"自体を表すQDirオブジェクトが欲しい場合は、QDir actualDir(dirInfo.filePath()); のように、QDirのコンストラクタにQFileInfo::filePath()を渡す必要があります。

例3: absPath オプションの使用 (相対パスから絶対パスの親を取得)

相対パスのQFileInfoから、絶対パスの親ディレクトリを取得する例です。

#include <QCoreApplication>
#include <QFileInfo>
#include <QDir>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 相対パスのファイルを仮定します
    // プログラムを実行するカレントディレクトリからの相対パス
    QString relativeFilePath = "data/logs/app_log.txt";

    QFileInfo fileInfo(relativeFilePath);

    if (fileInfo.exists() && fileInfo.isFile()) { // 存在確認は重要
        qDebug() << "対象ファイルパス (相対):" << fileInfo.filePath();
        // 出力例: 対象ファイルパス (相対): "data/logs/app_log.txt"

        // デフォルト (absPath = false)
        QDir parentDirRelative = fileInfo.dir();
        qDebug() << "親ディレクトリ (相対):" << parentDirRelative.path();
        // 出力例: 親ディレクトリ (相対): "data/logs"

        // absPath = true を指定して、絶対パスの親ディレクトリを取得
        QDir parentDirAbsolute = fileInfo.dir(true);
        qDebug() << "親ディレクトリ (絶対):" << parentDirAbsolute.path();
        // 出力例 (カレントディレクトリがC:/Users/YourUser/Projects/MyProjectの場合):
        // 親ディレクトリ (絶対): "C:/Users/YourUser/Projects/MyProject/data/logs"

    } else {
        qDebug() << "指定されたファイルは存在しないか、ファイルではありません:" << relativeFilePath;
        qDebug() << "(注意: 相対パスの場合、プログラムの実行ディレクトリに依存します)";
    }

    return a.exec();
}
  1. QFileInfo fileInfo(relativeFilePath); で相対パスのQFileInfoを作成します。
  2. fileInfo.dir(); (デフォルトでabsPath=false) は、元のパスが相対パスなので、返されるQDirも相対パスになります。
  3. fileInfo.dir(true); とすると、QFileInfoが解決された絶対パスに基づいた親ディレクトリのQDirが返されます。これは、プログラムが実行されているカレントディレクトリによって結果が変わることに注意してください。


QFileInfo::dir() は非常に便利ですが、特定のシナリオでは他の方法がより適切であったり、QFileInfo::dir()だけでは実現できないことを補完するために代替手段を知っておくことが重要です。

QFileInfo::path() または QFileInfo::absolutePath() を使用する

QFileInfo::dir()QDirオブジェクトを返すのに対し、QFileInfo::path()QFileInfo::absolutePath()は**文字列(QString)**で親ディレクトリのパスを返します。この文字列を直接QDirコンストラクタに渡すことで、QFileInfo::dir()と同じ結果を得ることができます。

利点

  • 必要に応じてパス文字列を操作してからQDirに渡すことができる。
  • QDirオブジェクトに変換する前のパス文字列を確認しやすい。

欠点

  • 直接QDirオブジェクトが欲しい場合は、ワンステップ余計な作業が必要。


#include <QCoreApplication>
#include <QFileInfo>
#include <QDir>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString filePath = "C:/Users/User/Documents/report.docx";
    QFileInfo fileInfo(filePath);

    if (fileInfo.exists()) {
        // QFileInfo::dir() を使用する場合
        QDir dirByQFileInfoDir = fileInfo.dir();
        qDebug() << "QFileInfo::dir()で取得:" << dirByQFileInfoDir.path();

        // QFileInfo::path() を使用する場合 (相対パスの場合)
        // QFileInfo::path() は、ファイル名部分を除いたパスを返す。
        // 元のQFileInfoが絶対パスなら絶対パス、相対パスなら相対パスを返す。
        QString parentPath = fileInfo.path();
        QDir dirByPath(parentPath);
        qDebug() << "QFileInfo::path()で取得:" << dirByPath.path();

        // QFileInfo::absolutePath() を使用する場合 (常に絶対パス)
        // QFileInfo::absolutePath() は、常にファイル名部分を除いた絶対パスを返す。
        QString absoluteParentPath = fileInfo.absolutePath();
        QDir dirByAbsolutePath(absoluteParentPath);
        qDebug() << "QFileInfo::absolutePath()で取得:" << dirByAbsolutePath.path();
    } else {
        qDebug() << "ファイルが存在しません:" << filePath;
    }

    return a.exec();
}

QDir::current() を使用して相対パスを解決する

プログラムのカレントディレクトリに基づいて相対パスを解決し、そこからファイルやディレクトリの親ディレクトリを取得したい場合に有効です。

利点

  • 明示的にカレントディレクトリを考慮したパス操作が可能。

欠点

  • ファイルやディレクトリのパスが常にカレントディレクトリからの相対パスであると仮定できる場合に限られる。


#include <QCoreApplication>
#include <QFileInfo>
#include <QDir>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // プログラムのカレントディレクトリを設定 (テスト用)
    // 通常は現在の実行ディレクトリがカレントディレクトリになります
    QDir::setCurrent("C:/MyAppData");
    qDebug() << "現在のカレントディレクトリ:" << QDir::currentPath();

    // 相対パスのファイル
    QString relativeFilePath = "config/settings.xml";
    QFileInfo fileInfo(relativeFilePath);

    if (fileInfo.exists()) {
        // QFileInfo::dir(true) はカレントディレクトリを考慮して絶対パスを返す
        QDir parentDirAbsolute = fileInfo.dir(true);
        qDebug() << "QFileInfo::dir(true)で取得 (絶対):" << parentDirAbsolute.path();
        // 例: C:/MyAppData/config

        // QDir::current() を使って手動で解決
        QDir currentDir = QDir::current();
        QString fullPath = currentDir.filePath(relativeFilePath); // 絶対パスのファイルパス
        QFileInfo resolvedFileInfo(fullPath);
        QDir resolvedParentDir = resolvedFileInfo.dir(); // この場合は絶対パスの親が返る
        qDebug() << "QDir::current()と組み合わせることで取得 (絶対):" << resolvedParentDir.path();
        // 例: C:/MyAppData/config
    } else {
        qDebug() << "ファイルが存在しません (相対パス):" << relativeFilePath;
    }

    return a.exec();
}

QDir の操作メソッドを直接使用する

特定のシナリオでは、QFileInfoを介さずに直接QDirオブジェクトを操作する方が理にかなっている場合があります。例えば、特定のディレクトリを基準として、その中に存在するサブディレクトリやファイルを操作する場合などです。

利点

  • QDirの豊富な機能(mkpath(), rmdir(), entryList()など)を直接利用できる。
  • ディレクトリを中心とした柔軟な操作が可能。

欠点

  • ファイルパスから「親」の情報を直接抽出する目的には向かない。


#include <QCoreApplication>
#include <QDir>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 特定のディレクトリをQDirオブジェクトとして作成
    QString baseDirPath = "C:/Projects/MyProject";
    QDir baseDir(baseDirPath);

    if (baseDir.exists()) {
        qDebug() << "基準ディレクトリ:" << baseDir.path();

        // 基準ディレクトリ内のサブディレクトリ "src" を表すQDirを取得
        // QDir::filePath() は、現在のQDirパスに指定された名前を結合する
        QString srcDirPath = baseDir.filePath("src");
        QDir srcDir(srcDirPath);
        qDebug() << "サブディレクトリ 'src':" << srcDir.path();

        // QDir::filePath() の結果は、そのパスをQFileInfoに渡せば
        // そのQFileInfoの親が baseDir になる
        QFileInfo srcFileInfo(srcDirPath);
        qDebug() << "'src' のQFileInfoから取得した親:" << srcFileInfo.dir().path();
        // 出力: C:/Projects/MyProject

        // 新しいディレクトリを作成したい場合
        QString newDirPath = baseDir.filePath("build");
        if (!QDir(newDirPath).exists()) {
            if (baseDir.mkdir("build")) {
                qDebug() << "'build' ディレクトリを作成しました:" << newDirPath;
            } else {
                qDebug() << "'build' ディレクトリの作成に失敗しました。";
            }
        }
    } else {
        qDebug() << "基準ディレクトリが存在しません:" << baseDirPath;
    }

    return a.exec();
}

QFileInfo::dir()は、ファイルやディレクトリの情報を取得する際に、その「親ディレクトリ」をQDirオブジェクトとして簡単に取得できる点で非常に便利です。しかし、上記の代替方法も知っておくことで、Qtでのファイル・ディレクトリ操作の柔軟性が高まります。

  • QDirの直接操作: 特定のディレクトリを中心に、その中のファイルやサブディレクトリを直接操作したい場合に強力です。
  • QDir::current(): プログラムのカレントディレクトリを基準とした相対パスを扱う場合に有効です。
  • QFileInfo::path() / QFileInfo::absolutePath(): パス文字列として親ディレクトリが欲しい場合や、文字列を操作してからQDirに渡したい場合に適しています。