【Qt】QFileInfo::size()徹底解説:ファイルサイズ取得の基本と応用

2025-06-01

この関数は、QFileInfoオブジェクトが参照しているファイルのサイズをバイト単位で返します。

戻り値

  • ファイルが存在しない場合、または何らかの理由でファイルサイズを取得できない場合は、0を返します。
  • ファイルが存在し、そのサイズが取得できる場合は、ファイルのサイズ(バイト単位)をqint64型で返します。

使用例

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

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

    // 存在しないファイルの場合
    QFileInfo nonExistentFile("non_existent_file.txt");
    if (!nonExistentFile.exists()) {
        qDebug() << "ファイル 'non_existent_file.txt' は存在しません。";
        qDebug() << "サイズ: " << nonExistentFile.size() << "バイト"; // 0 を返す
    }

    // 存在するファイルの場合(例としてこのC++ファイル自体)
    QFileInfo existingFile("main.cpp"); // もしこのコードがmain.cppに書かれているなら
    if (existingFile.exists()) {
        qDebug() << "ファイル '" << existingFile.fileName() << "' は存在します。";
        qDebug() << "サイズ: " << existingFile.size() << "バイト"; // ファイルの実際のサイズを返す
    } else {
        qDebug() << "ファイル 'main.cpp' が見つかりませんでした。";
    }

    return a.exec();
}


size()が 0 を返す場合

これは最も一般的な問題の一つです。size()0 を返す主な理由は以下の通りです。

  • 巨大なファイルサイズ(32-bitシステムでの問題)
    古いQtのバージョンや、32-bitシステムでqint64以外の型(例えばint)でsize()の結果を受け取っている場合、2GBを超えるファイルなどでオーバーフローが発生し、不正な値(負の値や0)が返されることがあります。

    • トラブルシューティング
      • QFileInfo::size()の戻り値はqint64型なので、必ずqint64型の変数で受け取るようにします。qint64は64ビットの整数型であり、非常に大きなファイルサイズを扱うことができます。
      • 使用しているQtのバージョンが古い場合は、最新の安定版への更新も検討します。
  • ファイルが開いている/ロックされている
    他のプロセスによってファイルが排他的に開かれている(ロックされている)場合、ファイルサイズの取得に失敗し、0を返すことがあります。

    • トラブルシューティング
      • ファイルを使用している可能性のある他のアプリケーションを閉じてみます。
      • プログラム内でQFileなどでファイルを開いている場合、適切にclose()されているか確認します。
  • ディレクトリを参照している
    QFileInfoオブジェクトがファイルではなくディレクトリを参照している場合、size()0 を返します。ディレクトリは「サイズ」という概念を持ちません(厳密にはディレクトリ自体にもファイルシステム上のサイズがありますが、QFileInfo::size()はそれを示しません)。

    • トラブルシューティング
      • QFileInfo::isDir()を使って、QFileInfoがディレクトリを参照しているかどうかを確認します。
      • QFileInfo::isFile()を使って、ファイルであることを明示的に確認します。
  • ファイルにアクセスできない(権限がない)
    ファイルが存在しても、アプリケーションにそのファイルを読み取る権限がない場合、size()0 を返すことがあります。

    • トラブルシューティング
      • アプリケーションを実行しているユーザーが、そのファイルに対する読み取り権限を持っていることを確認します。
      • ネットワーク共有上のファイルにアクセスしている場合、ネットワークのアクセス権限を確認します。
  • ファイルが存在しない
    最も単純なケースです。指定されたパスにファイルが存在しない場合、QFileInfoは有効なファイル情報を取得できず、size()0 を返します。

    • トラブルシューティング
      • QFileInfo::exists()を使って、size()を呼び出す前にファイルが存在するかどうかを確認します。
      • ファイルのパスが正しいか(スペルミス、大文字小文字の区別、絶対パス/相対パスの指定など)を再確認します。
      • ファイルシステム上の実際にファイルが存在するかを確認します。
      • アプリケーションがファイルへの読み取り権限を持っているか確認します。特にLinuxなどのUNIX系OSでは権限の問題が発生しやすいです。

シンボリックリンク (ショートカット) のサイズに関する誤解

  • 問題
    Windowsのショートカット (.lnkファイル) やUNIX/Linuxのシンボリックリンクを参照している場合、QFileInfo::size()リンク自体ではなく、リンクが指す実際のファイルのサイズを返します。ユーザーが「ショートカットファイルのサイズ」を期待している場合に混乱が生じます。
    • トラブルシューティング
      • QFileInfo::isSymLink()を使って、オブジェクトがシンボリックリンクであるかを確認します。
      • シンボリックリンク自体のサイズが必要な場合は、QFileでシンボリックリンクファイルを開き、QFile::size()を呼び出すことで取得できる場合があります(ただし、OSやファイルシステムによって挙動が異なる可能性があります)。Windowsの.lnkファイルの場合、QFile::size()でもターゲットのサイズが返されることが報告されています。この場合、ファイルの内容を直接読み込んでサイズを測るなどのより低レベルなアプローチが必要になることがあります。

パフォーマンスの問題

  • 問題
    大量のファイルのQFileInfo::size()をループ内で頻繁に呼び出すと、ファイルシステムへのアクセスがボトルネックとなり、処理が遅くなることがあります。特にネットワークドライブ上のファイルでは顕著です。
    • トラブルシューティング
      • QDir::entryInfoList()を使用して、一度にディレクトリ内のすべてのファイル情報を取得し、そのリストからQFileInfoオブジェクトを取り出すようにします。これにより、ファイルシステムへのアクセス回数を減らすことができます。
      • 必要に応じてQFileInfo::setCaching(true)を呼び出すことでキャッシュを有効にできますが、QFileInfoは通常内部的にキャッシュを使用しているため、明示的に呼び出す必要がない場合もあります。ファイルが変更された可能性がある場合は、refresh()を呼び出して情報を更新することを忘れないでください。
      • ファイルのサイズが必要な処理を、バックグラウンドスレッド(QThreadPoolQtConcurrentなど)で行うことで、UIの応答性を維持します。
  • 問題
    QFileInfoオブジェクトは、一度ファイル情報を読み込むと、その情報を内部的にキャッシュします。もしファイルが外部で変更された場合(別のアプリケーションがサイズを変更したなど)、QFileInfo::size()は古いキャッシュされた値を返す可能性があります。
    • トラブルシューティング
      • ファイル情報の更新が必要な場合は、QFileInfo::refresh()を呼び出して、最新のファイルシステム情報に更新します。

QFileInfo::size()を使用する際は、以下の点を常に意識することが重要です。

  • パフォーマンスへの配慮
    大量ファイル処理ではQDir::entryInfoList()を検討する。
  • キャッシュの考慮
    必要に応じてrefresh()で情報を更新する。
  • シンボリックリンクの挙動理解
    シンボリックリンクの場合はターゲットのサイズが返されることを理解する。
  • 権限の確認
    ファイルへのアクセス権限があることを確認する。
  • 適切な型で受け取る
    常にqint64で戻り値を受け取る。
  • ファイルかディレクトリか
    QFileInfo::isFile()またはQFileInfo::isDir()で種類を確認する。
  • ファイルの存在確認
    QFileInfo::exists()で存在を確認する。


基本的なファイルサイズの取得

最も基本的な例です。指定したファイルのサイズをバイト単位で取得します。

#include <QCoreApplication>
#include <QFileInfo>
#include <QDebug>
#include <QFile> // テストファイル作成用

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

    // テストファイルを作成する
    // main.cpp と同じディレクトリに "test_file.txt" を作成
    QString testFileName = "test_file.txt";
    QFile file(testFileName);
    if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        file.write("Hello, QFileInfo::size() example!");
        file.close();
        qDebug() << testFileName << " を作成しました。";
    } else {
        qWarning() << testFileName << " の作成に失敗しました。";
    }

    // QFileInfo オブジェクトを作成
    QFileInfo fileInfo(testFileName);

    // ファイルが存在するかどうかを確認
    if (fileInfo.exists()) {
        qDebug() << "ファイル名:" << fileInfo.fileName();
        qDebug() << "絶対パス:" << fileInfo.absoluteFilePath();
        qDebug() << "ファイルサイズ:" << fileInfo.size() << "バイト";

        // キロバイト、メガバイトに変換する例
        qDebug() << "ファイルサイズ:" << QString::number(fileInfo.size() / 1024.0, 'f', 2) << "KB";
        qDebug() << "ファイルサイズ:" << QString::number(fileInfo.size() / (1024.0 * 1024.0), 'f', 2) << "MB";

    } else {
        qDebug() << "ファイルが見つかりません:" << testFileName;
    }

    // 存在しないファイルの例
    QFileInfo nonExistentFileInfo("non_existent_file.txt");
    if (!nonExistentFileInfo.exists()) {
        qDebug() << "\nファイルが見つかりません:" << nonExistentFileInfo.fileName();
        qDebug() << "存在しないファイルのサイズ (0を返すはず):" << nonExistentFileInfo.size() << "バイト";
    }

    return a.exec();
}

解説

  • 存在しないファイルの場合、size()0 を返すことも示しています。
  • バイト単位の値を、キロバイトやメガバイトに変換する例も示しています。
  • size()qint64 を返すため、大きなファイルサイズも正確に扱えます。
  • QFileInfo オブジェクトを作成し、exists() でファイルの存在を確認してから size() を呼び出しています。
  • QFile を使って一時的なテストファイルを作成しています。

ディレクトリのサイズに関する注意点

QFileInfo::size() はディレクトリに対しては意味のあるファイルサイズを返しません(通常 0 を返します)。ディレクトリ内の全ファイルの合計サイズを計算する例を示します。

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

// ディレクトリ内の全ファイルの合計サイズを再帰的に計算する関数
qint64 calculateDirectorySize(const QString &dirPath)
{
    qint64 totalSize = 0;
    QDir dir(dirPath);

    // ディレクトリが存在するか確認
    if (!dir.exists()) {
        qDebug() << "エラー: ディレクトリが見つかりません -" << dirPath;
        return 0;
    }

    QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);

    for (const QFileInfo &entry : entries) {
        if (entry.isFile()) {
            totalSize += entry.size();
        } else if (entry.isDir()) {
            // サブディレクトリの場合は再帰的に呼び出す
            totalSize += calculateDirectorySize(entry.absoluteFilePath());
        }
    }
    return totalSize;
}

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

    // カレントディレクトリの情報を取得
    QString currentDirPath = QDir::currentPath();
    QFileInfo currentDirInfo(currentDirPath);

    qDebug() << "現在のディレクトリ: " << currentDirPath;
    // QFileInfo::size() はディレクトリに対して0を返すことを確認
    qDebug() << "QFileInfo::size() (ディレクトリ): " << currentDirInfo.size() << "バイト"; // 0 を返すはず

    // ディレクトリ内の合計サイズを計算
    qint64 totalDirSize = calculateDirectorySize(currentDirPath);
    qDebug() << "ディレクトリ内の合計サイズ:" << totalDirSize << "バイト";

    return a.exec();
}

解説

  • この例で示すように、QFileInfo::size() はディレクトリに対しては有効な合計サイズを返さないため、手動で計算する必要があります。
  • entry.isFile()entry.isDir() を使って、ファイルかディレクトリかを判別しています。
  • QDir::entryInfoList() を使ってディレクトリ内のエントリ(ファイルとサブディレクトリ)を取得しています。
  • calculateDirectorySize 関数は、再帰的にディレクトリ内のファイルサイズを合計します。

シンボリックリンクのサイズに関する挙動

シンボリックリンク(Windowsのショートカット、Linuxのシンボリックリンクなど)の場合、QFileInfo::size() はリンク自体ではなく、リンクが指すターゲットファイルのサイズを返します。

#include <QCoreApplication>
#include <QFileInfo>
#include <QDebug>
#include <QFile>
#include <QDir> // シンボリックリンク作成用

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

    QString originalFilePath = "original_file.txt";
    QString symlinkPath = "symlink_to_original.txt";

    // オリジナルファイルを作成
    QFile originalFile(originalFilePath);
    if (originalFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
        originalFile.write("This is the original file content.");
        originalFile.close();
        qDebug() << originalFilePath << " を作成しました。サイズ:" << QFileInfo(originalFilePath).size() << "バイト";
    } else {
        qWarning() << originalFilePath << " の作成に失敗しました。";
        return 1;
    }

    // シンボリックリンクを作成
    // Windowsではショートカット(.lnk)、Linuxではシンボリックリンクが作成される
    if (QFile::link(originalFilePath, symlinkPath)) {
        qDebug() << symlinkPath << " (シンボリックリンク) を作成しました。";
    } else {
        qWarning() << symlinkPath << " (シンボリックリンク) の作成に失敗しました。";
        // Linuxで実行権限がない場合など、失敗することがあります
    }

    // シンボリックリンクのQFileInfo
    QFileInfo symlinkInfo(symlinkPath);

    if (symlinkInfo.exists()) {
        qDebug() << "\nシンボリックリンク名:" << symlinkInfo.fileName();
        qDebug() << "シンボリックリンクですか?" << symlinkInfo.isSymLink();
        qDebug() << "ターゲットパス:" << symlinkInfo.symLinkTarget();
        // ここが重要:シンボリックリンクのサイズはターゲットのサイズを返す
        qDebug() << "シンボリックリンクのサイズ (ターゲットのサイズ):" << symlinkInfo.size() << "バイト";
    } else {
        qDebug() << "\nシンボリックリンクが見つかりません:" << symlinkPath;
    }

    // おまけ: シンボリックリンク自体の物理的なファイルサイズを取得する試み
    // これはOSやファイルシステムによって挙動が異なる可能性があり、
    // QFileInfo::size()では直接取得できないことが多い
    QFile rawSymlink(symlinkPath);
    if (rawSymlink.open(QIODevice::ReadOnly)) {
        qDebug() << "QFile::size() (シンボリックリンク自体を直接開いた場合):" << rawSymlink.size() << "バイト";
        rawSymlink.close();
    } else {
        qDebug() << "シンボリックリンク自体を開けませんでした。";
    }


    return a.exec();
}

解説

  • QFile::size() を使ってシンボリックリンク自体を開いてサイズを取得しようと試みていますが、これはOSやファイルシステムによって結果が異なる可能性があり、必ずしもシンボリックリンク自体の物理的なサイズを返しません。多くの場合は、QFileInfo::size() と同じくターゲットのサイズを返します。
  • QFileInfo::size() は、symlinkInfo.size()オリジナルファイルのサイズを返すことを示しています。
  • symlinkInfo.isSymLink() でシンボリックリンクであるかを確認し、symlinkInfo.symLinkTarget() でリンク先のパスを取得しています。
  • QFile::link() を使ってシンボリックリンクを作成しています。

ファイルが外部から変更された場合、QFileInfo のキャッシュされた情報を更新するために refresh() を使用します。

#include <QCoreApplication>
#include <QFileInfo>
#include <QDebug>
#include <QFile>
#include <QThread> // スリープ用

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

    QString fileName = "mutable_file.txt";
    QFile file(fileName);

    // 最初にファイルを作成し、内容を書き込む
    if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
        file.write("Initial content.");
        file.close();
        qDebug() << "Initial size:" << QFileInfo(fileName).size() << "バイト";
    } else {
        qWarning() << "ファイルの作成に失敗しました。";
        return 1;
    }

    QFileInfo fileInfo(fileName);
    qDebug() << "QFileInfoオブジェクト作成直後のサイズ:" << fileInfo.size() << "バイト";

    // 外部からファイルが変更されたと仮定し、少し待つ
    // (実際には別のプロセスでファイルを変更するなどのシミュレーション)
    qDebug() << "\nファイルを外部で変更するのを待っています...";
    QThread::sleep(2); // 2秒待つ

    // ここで、手動で "mutable_file.txt" の内容を変更するか、
    // 以下のコードでプログラム的に内容を追加する

    // ファイルに内容を追加する
    if (file.open(QIODevice::Append | QIODevice::Text)) {
        file.write("\nAppended new content.");
        file.close();
        qDebug() << "ファイルに内容を追加しました。";
    } else {
        qWarning() << "ファイルの書き込みに失敗しました。";
        return 1;
    }

    // refresh() を呼び出さずにサイズを取得してみる
    qDebug() << "refresh()なしでのサイズ (古いキャッシュの可能性):" << fileInfo.size() << "バイト";

    // refresh() を呼び出して情報を更新
    fileInfo.refresh();
    qDebug() << "refresh()呼び出し後のサイズ (最新):" << fileInfo.size() << "バイト";

    return a.exec();
}
  • fileInfo.refresh() を呼び出すことで、QFileInfo オブジェクトがファイルシステムから最新の情報を再読み込みし、その後の size() 呼び出しで最新のファイルサイズが取得されることを示しています。
  • refresh() を呼び出す前の fileInfo.size() は古い値(キャッシュされた値)を返す可能性があることを示しています。
  • QThread::sleep() で少し待機し、この間に「外部でファイルが変更された」という状況をシミュレートします。(実際には別のエディタなどでファイルを変更してみるとより明確に挙動を確認できます。)
  • ファイルを作成し、初期サイズを取得します。


QFile::size()

これは QFileInfo::size() の最も直接的な代替方法であり、多くの場合、こちらの方が適していることがあります。

特徴

  • パフォーマンス
    ファイルを開くというオーバーヘッドはありますが、ファイルが開かれている状態であれば、ファイルシステムへの余計な問い合わせは発生しません。
  • エラーハンドリング
    ファイルを開く際にエラーが発生した場合(例: ファイルが存在しない、アクセス権がない)、QFile::open()false を返し、error() メソッドで詳細なエラー情報を取得できます。
  • 正確性
    開いているファイルに対しては、常にその時点での正確なサイズを返します。
  • ファイルを開く必要がある
    QFile オブジェクトを介してファイルを開いた後でなければ、size() を呼び出せません。

使用例

#include <QCoreApplication>
#include <QFile>
#include <QDebug>
#include <QFileInfo> // 比較のためにQFileInfoも使用

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

    QString fileName = "my_document.txt";

    // テストファイルを作成
    QFile testFile(fileName);
    if (testFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
        testFile.write("This is a test document.");
        testFile.close();
        qDebug() << "ファイル '" << fileName << "' を作成しました。";
    } else {
        qWarning() << "ファイルの作成に失敗しました: " << testFile.errorString();
    }

    // 1. QFile::size() を使用
    QFile file(fileName);
    if (file.open(QIODevice::ReadOnly)) { // ファイルを開く必要がある
        qint64 fileSize = file.size();
        qDebug() << "QFile::size(): ファイルサイズ =" << fileSize << "バイト";
        file.close(); // 必ず閉じる
    } else {
        qDebug() << "QFile: ファイルを開けませんでした -" << file.errorString();
    }

    // 2. QFileInfo::size() との比較
    QFileInfo fileInfo(fileName);
    if (fileInfo.exists()) {
        qint64 fileInfoSize = fileInfo.size();
        qDebug() << "QFileInfo::size(): ファイルサイズ =" << fileInfoSize << "バイト";
    } else {
        qDebug() << "QFileInfo: ファイルが見つかりません。";
    }

    // 存在しないファイルの場合
    QString nonExistentFile = "non_existent.dat";
    QFile nonExistentQFile(nonExistentFile);
    if (nonExistentQFile.open(QIODevice::ReadOnly)) {
        qDebug() << "QFile::size() for non-existent file:" << nonExistentQFile.size(); // ここは実行されないはず
        nonExistentQFile.close();
    } else {
        qDebug() << "QFile: 存在しないファイルは開けません -" << nonExistentQFile.errorString();
        qDebug() << "QFile::size() for non-existent file (オープン失敗時):" << nonExistentQFile.size(); // 0 を返す
    }


    return a.exec();
}

使いどころ

  • ファイルオープン時の詳細なエラー情報が必要な場合。
  • ファイルが開かれた状態で、その時点の正確なサイズが必要な場合。
  • ファイルの内容を読み書きする前など、既にファイルを開く必要がある場合

POSIX/Windows API (低レベルなシステムコール)

Qt はクロスプラットフォームな抽象化を提供していますが、場合によっては特定のOSのネイティブAPIを直接呼び出すことで、より細かい制御や、Qtの機能では実現できない特殊な情報(非常にまれですが)を得ることができます。

Linux/macOS (POSIX)

  • struct stat 構造体の st_size メンバーがファイルサイズ(バイト単位)を格納します。
  • stat() または fstat() 関数を使用します。これらは sys/stat.h に定義されています。

Windows

  • GetFileSizeEx()LARGE_INTEGER 構造体を使用するため、64ビットのファイルサイズを正確に扱えます。
  • GetFileSize() または GetFileSizeEx() 関数を使用します。これらは windows.h に定義されています。

特徴

  • パフォーマンス
    Qt の関数も内部的にはこれらの API を呼び出しているため、劇的なパフォーマンス向上は期待できません。しかし、Qtのオーバーヘッドを完全に避けたい場合に検討されます。
  • エラーハンドリング
    エラーコードを直接処理する必要があります(例: errno または GetLastError())。
  • クロスプラットフォームではない
    OSごとに異なるコードを記述する必要があります。
  • 最も低レベルな制御
    OSが提供する生のファイル情報にアクセスできます。

使用例 (Linux/macOS の stat の例)

#include <QCoreApplication>
#include <QDebug>
#include <QFile> // テストファイル作成用

#ifdef Q_OS_UNIX // LinuxやmacOSの場合
#include <sys/stat.h> // stat() の定義
#include <errno.h>    // errno の定義
#endif

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

    QString fileName = "native_api_test.txt";

    // テストファイルを作成
    QFile testFile(fileName);
    if (testFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
        testFile.write("This file is for native API size test.");
        testFile.close();
        qDebug() << "ファイル '" << fileName << "' を作成しました。";
    } else {
        qWarning() << "ファイルの作成に失敗しました: " << testFile.errorString();
    }

#ifdef Q_OS_UNIX
    struct stat fileStat;
    // QString::toLocal8Bit().constData() で C-style 文字列に変換
    if (stat(fileName.toLocal8Bit().constData(), &fileStat) == 0) {
        qDebug() << "Native API (stat): ファイルサイズ =" << (qint64)fileStat.st_size << "バイト";
    } else {
        qDebug() << "Native API (stat): ファイル情報を取得できませんでした。エラー: " << strerror(errno);
    }
#else
    qDebug() << "このプラットフォームではネイティブAPIの例はコンパイルされません。";
#endif

    return a.exec();
}

使いどころ

  • パフォーマンスが極めてクリティカルな場合(ただし効果は限定的)
    Qtの抽象化によるわずかなオーバーヘッドすら許容できない場合。しかし、ほとんどのアプリケーションではQtのAPIで十分です。
  • 既存のC/C++コードベースに統合する場合
    既存のネイティブAPI呼び出しに依存しているライブラリなどと連携する場合。
  • 非常に特殊な要件がある場合
    QtのAPIではカバーできないファイルシステム固有の低レベルな情報が必要な場合。

これは QFileInfo::size() の代替というよりは、QFileInfo::size() を用いて**ディレクトリの「サイズ」**を計算する一般的な方法です。QFileInfo::size() 自体はディレクトリに対しては意味のある値を返さないため、この方法が代替として使われます。

特徴

  • パフォーマンス
    大量のファイルや深い階層のディレクトリでは、処理に時間がかかることがあります。
  • QDir と QFileInfo の組み合わせ
    Qtの提供する高レベルなクラスを組み合わせて、クロスプラットフォームな実装が可能です。
  • 再帰的処理
    ディレクトリ内のサブディレクトリやファイルも考慮して合計サイズを計算できます。

使用例
(上記「QFileInfo::size() の例」の「2. ディレクトリのサイズに関する注意点」のセクションで示されているため、ここでは省略します。)

  • バックアップツールやディスク使用量分析ツールなど、ディレクトリ構造を扱うアプリケーション。
  • ユーザーにディレクトリの総容量を表示したい場合。
代替方法特徴使いどころ
QFile::size()ファイルを開く必要がある、開いたファイルに対して正確なサイズ。既にファイルを開いている、または開く必要がある場合。
ネイティブAPI (stat, GetFileSizeEx)最も低レベル、OS依存、特殊な要件向け。既存のネイティブコードとの統合、極めて特殊なケース。
QDir::entryInfoList + QFileInfo::size()ディレクトリの合計サイズを計算、再帰的。ディレクトリの総容量表示、ディスク使用量分析。