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 が生成されているのだが、Cygwin、Linux、Mac では ~ はホームディレクトリなので、cd ~ や ls ~ を行うと、ホームディレクトリが対象になってしまう。
やれやれと思って、生成された ~ を消すために rm -rf ~ とやってしまったところ、ホームディレクトリ以下が削除されてしまった。かなりうっかりしていた。
この一件で Ubuntu が壊れてしまい、今週ずっと復旧作業をしていたんだけど、その話はまた別のエントリで。