コンテンツにスキップ

最終更新:2026-10-12

C++17 と SQLite でディレクトリサイズを集計

プロジェクト実践:C++17 と SQLite によるフォルダサイズの計算と保存

この節はあるプロジェクト背景を軸に展開します:業務で特定のフォルダのサイズを定期的にチェックし、永続化処理も行う必要があると仮定した場合、C++ ではこのプロジェクトをどのように完成させるのでしょうか?

この節では、小さなプロジェクトを通して、C++17 と SQLite を使ってフォルダサイズの計算と保存を行うシステムを実現し、ファイルシステムの管理に役立てます。

プロジェクトの目標

次の機能を実装します: 1. 指定ディレクトリとそのサブディレクトリのサイズを再帰的に計算。 2. 計算結果を SQLite データベースに保存**し、後続の照会・分析を容易にします。 3. **拡張性が高い:プロジェクトを簡単に改造して、マルチスレッド対応や性能最適化、結果の他データベースへの保存などを追加できます。

注:楽をしたい方向けに、完全なコードは星球で更新済みです。

プロジェクトの実装ステップ

1. 環境

まず、開発環境に以下のツールがインストールされていることを確認してください: - C++17 対応コンパイラ:例えば g++ です。次のコマンドでバージョンを確認できます:

g++ --version
g++ が C++17 規格をサポートしていることを確認してください。

  • SQLite3:データベース操作には SQLite を使用します。パッケージマネージャからインストールできます:
    sudo apt-get install sqlite3 libsqlite3-dev
    
    インストール完了後、SQLite データベースの開発ライブラリ libsqlite3-dev によって、C++ で SQLite を正常に利用できるようになります。

2. プロジェクト構造の作成

コードを複数のモジュールに分け、明快なアーキテクチャを保ちます: - folder_size.h / folder_size.cpp:ディレクトリとそのサブディレクトリのサイズの再帰計算を担当します。 - database.h / database.cpp:SQLite データベース操作のロジックをカプセル化します。 - main.cpp:メインプログラムの入口で、全体のフローを制御します。

プロジェクトのディレクトリ構造は次のとおりです:

project/
│── folder_size.h
│── folder_size.cpp
│── database.h
│── database.cpp
└── main.cpp

3. コード実装

次に、各モジュールを 1 歩ずつ実装していきます。

3.1 ディレクトリ計算モジュール

C++17 には、ディレクトリを再帰的に走査してサイズを計算する std::filesystem ライブラリがあります。したがって、その核心となる実装は次のとおりです:

uintmax_t total_size = 0;
for (const auto& entry : fs::recursive_directory_iterator(dir_path)) {
  if (fs::is_regular_file(entry.path())) {
    total_size += fs::file_size(entry.path());
  }
}

ルートディレクトリも計算したい場合は、もう一度計算するだけです。

3.2 SQLiteデータベース操作

導入:

#include <sqlite3.h>

使用:

sqlite3_close(db_); // 关闭

// 插入
for (const auto& [folder, size] : folder_sizes) {
  const std::string insert_sql = 
      "INSERT OR REPLACE INTO FolderSizes (Folder, Size) "
      "VALUES ('" + folder + "', " + std::to_string(size) + ");";
  if (!ExecuteSQL(insert_sql)) {
    return false;
  }
}

// 执行
sqlite3_exec

4. ビルドと実行

プロジェクトのビルドは非常にシンプルです:

mkdir build
cmake ../
make -j8

その後、プログラムを実行してディレクトリサイズを計算し、データベースに保存します:

./folder_size_calculator

プログラムは指定ディレクトリのサイズを再帰的に計算し、結果を folder_sizes.db データベースに保存します。

5. データベースを照会する

最後に、SQLite コマンドラインツールでデータベースの内容を照会できます:

sqlite3 folder_sizes.db
sqlite> SELECT * FROM FolderSizes;

保存済みのすべてのディレクトリとその対応するサイズが表示されます。

この節はここまでです

関連トピック

コメント