aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil/basicfile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenutil/basicfile.cpp')
-rw-r--r--src/zenutil/basicfile.cpp20
1 files changed, 20 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()
{
}