#pragma once #include #include namespace beast { /** RAII temporary directory. The directory and all its contents are deleted when the instance of `temp_dir` is destroyed. */ class TempDir { boost::filesystem::path path_; public: #if !GENERATING_DOCS TempDir(TempDir const&) = delete; TempDir& operator=(TempDir const&) = delete; #endif /// Construct a temporary directory. TempDir() { auto const dir = boost::filesystem::temp_directory_path(); do { path_ = dir / boost::filesystem::unique_path(); } while (boost::filesystem::exists(path_)); boost::filesystem::create_directory(path_); } /// Destroy a temporary directory. ~TempDir() { // use non-throwing calls in the destructor boost::system::error_code ec; boost::filesystem::remove_all(path_, ec); // TODO: warn/notify if ec set ? } /// Get the native path for the temporary directory [[nodiscard]] std::string path() const { return path_.string(); } /** Get the native path for the a file. The file does not need to exist. */ [[nodiscard]] std::string file(std::string const& name) const { return (path_ / name).string(); } }; } // namespace beast