xlnt/tests/helpers/temporary_file.hpp

57 lines
1004 B
C++
Raw Normal View History

2014-05-13 07:59:33 +08:00
#pragma once
#include <array>
#include <cstdio>
#include <string>
2015-11-01 22:47:52 +08:00
#include <detail/include_windows.hpp>
#include <helpers/path_helper.hpp>
2014-05-20 08:47:15 +08:00
2016-08-03 12:12:18 +08:00
namespace {
static std::string create_temporary_filename()
2014-05-13 07:59:33 +08:00
{
#ifdef _MSC_VER
2014-05-15 10:07:23 +08:00
std::array<TCHAR, MAX_PATH> buffer;
DWORD result = GetTempPath(static_cast<DWORD>(buffer.size()), buffer.data());
2016-08-03 12:12:18 +08:00
if (result > MAX_PATH)
2014-05-15 10:07:23 +08:00
{
2016-08-03 12:12:18 +08:00
throw std::runtime_error("buffer is too small");
2014-05-15 10:07:23 +08:00
}
2016-08-03 12:12:18 +08:00
if (result == 0)
2014-05-15 10:07:23 +08:00
{
2016-08-03 12:12:18 +08:00
throw std::runtime_error("GetTempPath failed");
2014-05-15 10:07:23 +08:00
}
2016-08-03 12:12:18 +08:00
return std::string(buffer.begin(), buffer.begin() + result) + "xlnt.xlsx";
2014-05-15 10:07:23 +08:00
#else
2014-06-13 23:41:32 +08:00
return "/tmp/xlnt.xlsx";
2014-05-15 10:07:23 +08:00
#endif
}
2014-05-13 07:59:33 +08:00
2016-08-03 12:12:18 +08:00
} // namespace
class temporary_file
{
public:
temporary_file() : path_(create_temporary_filename())
2014-05-13 07:59:33 +08:00
{
2016-08-03 12:12:18 +08:00
if(path_.exists())
{
2016-08-03 12:12:18 +08:00
std::remove(path_.to_string().c_str());
}
2014-05-13 07:59:33 +08:00
}
~temporary_file()
2014-05-13 07:59:33 +08:00
{
2016-08-03 12:12:18 +08:00
std::remove(path_.to_string().c_str());
2014-05-13 07:59:33 +08:00
}
2016-08-03 12:12:18 +08:00
xlnt::path get_path() const { return path_; }
2014-05-13 07:59:33 +08:00
private:
2016-08-03 12:12:18 +08:00
const xlnt::path path_;
2014-05-15 10:07:23 +08:00
};