// TJP COPYRIGHT HEADER #ifdef TJP_CORE_HEADER_ONLY #pragma once #endif #include #include "write.hpp" #include #include "../random/file_name.hpp" #include "times.hpp" #include #include namespace tjp::core::file { TJP_CORE_HEADER_ONLY_INLINE bool write(const String &path_, const ContentsView &contents, const WriteOptions &options) { auto path = String(path_); auto random_ = random::file_name(); auto extension = "." + random_; auto temporary = path + extension; std::ofstream file(temporary, std::ios::binary); if (!file) return false; file.write(contents.data(), contents.size()); file.close(); remove(path.c_str()); if (rename(temporary.c_str(), path.c_str())) return false; if (options.lastModifiedTime) setFileLastModifiedTime(path, options.lastModifiedTime); return true; } TJP_CORE_HEADER_ONLY_INLINE void require_write(const String &path, const ContentsView &contents, const WriteOptions &options) { if (!write(path, contents, options)) throw Exception { "failed to write file " + String(path) }; } TJP_CORE_HEADER_ONLY_INLINE bool write(const StringView &path, const ContentsView &contents, const WriteOptions &options) { return write(String(path), contents, options); } TJP_CORE_HEADER_ONLY_INLINE void require_write(const StringView &path, const ContentsView &contents, const WriteOptions &options) { return require_write(String(path), contents, options); } } // namespace