閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

boost::filesystem::pathに対する操作、問い合わせ

Boost.Filesystemには「pathを受け取って何かする」という関数が用意されています。

問い合わせ

namespace fs = boost::filesystem;
fs::path const dir("C:\\hom");
fs::path const file("hom.txt");
fs::path const path = dir / file;

// ファイル or ディレクトリの存在確認
fs::exists(dir);
fs::exists(path);

// ディレクトリかな?
fs::is_directory(path);

// ファイルかな?
fs::is_regular_file(path);

// ファイル or ディレクトリが空?
// パスが存在しない場合は例外が送出される
fs::is_empty(path);
// 例外が出て欲しくない場合は第二引数にエラーコードの参照を渡す。
boost::system::error_code error;
fs::is_empty(path, error);

// ファイルサイズ(bytes)は?
fs::file_size(path);
// 最後に更新した日時は?
fs::last_write_time(path);

パスに対する操作

// ファイル or ディレクトリをコピー(from -> to)
fs::copy(from, to);
// ディレクトリをコピー(from -> to)
fs::copy_directory(from, to);
// ファイルをコピー(from -> to)
fs::copy_file(from, to, option);
// ディレクトリを作成。 C:\foo\bar を指定したとき、fooがなくても一気に作ってくれる
fs::create_directories(dir);
// ディレクトリを作成。 C:\foo\bar を指定したとき、fooがないと失敗
fs::create_directory(dir);
// ファイル or ディレクトリを削除
// ディレクトリは中が空のもののみ削除できる
fs::remove(path);
// ファイル or ディレクトリを削除
// ディレクトリを指定した場合は、中身も全部削除する
fs::remove_all(path);
// ファイル or ディレクトリの名前を変更
fs::rename(from, to);
// ファイルサイズを変更する
fs::resize_file(file, 100);
// space_info構造体を取得する
// http://www.boost.org/doc/libs/1_46_1/libs/filesystem/v3/doc/reference.html#space_info
// ディスクの使用量と空き容量を調べられるみたいです
fs::space(path);
// file_status構造体を取得する
// http://www.boost.org/doc/libs/1_46_1/libs/filesystem/v3/doc/reference.html#file_status
fs::status(path);
// 相対パスを渡すと、絶対パスにして返してくれる
fs::system_complete(file);
// ランダムなファイル名を作成して返してくれる。テンポラリファイルを作るときに使えそう
fs::unique_path();

ファイルの最終更新日は取れても、作成日は取れないんですね。シンボリックリンクを作ったり云々する系の関数は自分が使わないので省きました>< また、そのうち。