#pragma once #include #include #include #include #include "PathHelper.h" class temporary_directory { public: static std::string create() { #ifdef _WIN32 std::array buffer; DWORD result = GetTempPath(static_cast(buffer.size()), buffer.data()); if(result > MAX_PATH) { throw std::runtime_error("buffer is too small"); } if(result == 0) { throw std::runtime_error("GetTempPath failed"); } std::string directory(buffer.begin(), buffer.begin() + result); return path_helper::windows_to_universal_path(directory + "xlnt"); #else return "/tmp/xlsx"; #endif } temporary_directory() : filename_(create()) { } ~temporary_directory() { remove(filename_.c_str()); } std::string get_filename() const { return filename_; } private: const std::string filename_; };