boost::filesystem で ~ ディレクトリを作ってはいけない

よくあるアプリ固有の設定ファイルを保持するディレクトリを、ホーム以下に以下のように Boost のライブラリを使用して作ろうと思ったら・・・

boost::system::error_code ec;
const boost::filesystem::path dir("~/.hoge");
const boost::filesystem::file_status fsdir(boost::filesystem::status(dir, ec));
if (fsdir.type() == bfs::file_not_found) {
    boost::filesystem::create_directories(dir, ec);
}

カレントディレクトリに、通常作成することができない ~ が生成された。

上記は Cygwin で実行して、Windowsエクスプローラで表示している。

エクスプローラで見ると、~ 以下に .hoge が生成されているのだが、CygwinLinuxMac では ~ はホームディレクトリなので、cd ~ や ls ~ を行うと、ホームディレクトリが対象になってしまう。

やれやれと思って、生成された ~ を消すために rm -rf ~ とやってしまったところ、ホームディレクトリ以下が削除されてしまった。かなりうっかりしていた。


この一件で Ubuntu が壊れてしまい、今週ずっと復旧作業をしていたんだけど、その話はまた別のエントリで。