aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenutil')
-rw-r--r--src/zenutil/basicfile.cpp20
-rw-r--r--src/zenutil/include/zenutil/basicfile.h2
2 files changed, 22 insertions, 0 deletions
diff --git a/src/zenutil/basicfile.cpp b/src/zenutil/basicfile.cpp
index f553fe5a0..d837c2caf 100644
--- a/src/zenutil/basicfile.cpp
+++ b/src/zenutil/basicfile.cpp
@@ -560,6 +560,26 @@ TemporaryFile::MoveTemporaryIntoPlace(std::filesystem::path FinalFileName, std::
//////////////////////////////////////////////////////////////////////////
+void
+TemporaryFile::SafeWriteFile(std::filesystem::path Path, MemoryView Data)
+{
+ TemporaryFile TempFile;
+ std::error_code Ec;
+ TempFile.CreateTemporary(Path.parent_path(), Ec);
+ if (Ec)
+ {
+ throw std::system_error(Ec, fmt::format("Failed to create temp file for file at '{}'", Path));
+ }
+ TempFile.Write(Data, 0);
+ TempFile.MoveTemporaryIntoPlace(Path, Ec);
+ if (Ec)
+ {
+ throw std::system_error(Ec, fmt::format("Failed to move temp file '{}' to '{}'", TempFile.GetPath(), Path));
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+
LockFile::LockFile()
{
}
diff --git a/src/zenutil/include/zenutil/basicfile.h b/src/zenutil/include/zenutil/basicfile.h
index 0e4295ee3..375da20c3 100644
--- a/src/zenutil/include/zenutil/basicfile.h
+++ b/src/zenutil/include/zenutil/basicfile.h
@@ -101,6 +101,8 @@ public:
void MoveTemporaryIntoPlace(std::filesystem::path FinalFileName, std::error_code& Ec);
const std::filesystem::path& GetPath() const { return m_TempPath; }
+ static void SafeWriteFile(std::filesystem::path Path, MemoryView Data);
+
private:
std::filesystem::path m_TempPath;