diff --git a/openVulkanoCpp/IO/Archive/MultiPartArchiveWriter.cpp b/openVulkanoCpp/IO/Archive/MultiPartArchiveWriter.cpp index 6250a84..063670c 100644 --- a/openVulkanoCpp/IO/Archive/MultiPartArchiveWriter.cpp +++ b/openVulkanoCpp/IO/Archive/MultiPartArchiveWriter.cpp @@ -14,15 +14,16 @@ namespace openVulkanoCpp { MultiPartArchiveWriter::MultiPartArchiveWriter(const std::string& dir, const std::string& fileNamePattern, const ArchiveConfiguration& archiveConfiguration, - size_t sizeLimit, const std::shared_ptr& logger) + size_t sizeLimit, bool lazyCreation, + const std::shared_ptr& logger) : m_fileSizeLimit(sizeLimit), m_archiveId(0), m_archiveConfig(archiveConfiguration) - , m_dir(dir), m_fileNamePattern(fileNamePattern), m_logger(logger) + , m_dir(dir), m_fileNamePattern(fileNamePattern), m_logger(logger), m_lazyCreation(lazyCreation) { if (!m_dir.empty() && !std::filesystem::exists(m_dir)) { std::filesystem::create_directories(m_dir); } - StartNewFile(); + if (!lazyCreation) StartNewFile(); } MultiPartArchiveWriter::~MultiPartArchiveWriter() @@ -99,12 +100,12 @@ namespace openVulkanoCpp m_archives.clear(); } m_dir = newDir; - StartNewFile(); + if (!m_lazyCreation) StartNewFile(); } void MultiPartArchiveWriter::Split() { - if (!m_writer->GetTotalWrittenBytes()) return; // Nothing has been written yet, no need to split file + if (!m_writer || !m_writer->GetTotalWrittenBytes()) return; // Nothing has been written yet, no need to split file m_writer = nullptr; } } diff --git a/openVulkanoCpp/IO/Archive/MultiPartArchiveWriter.hpp b/openVulkanoCpp/IO/Archive/MultiPartArchiveWriter.hpp index a209704..da02723 100644 --- a/openVulkanoCpp/IO/Archive/MultiPartArchiveWriter.hpp +++ b/openVulkanoCpp/IO/Archive/MultiPartArchiveWriter.hpp @@ -7,6 +7,7 @@ #pragma once #include "ArchiveWriter.hpp" +#include "Math/ByteSize.hpp" #include namespace openVulkanoCpp @@ -21,13 +22,14 @@ namespace openVulkanoCpp std::unique_ptr m_writer; std::shared_ptr m_logger; std::vector m_archives; + bool m_lazyCreation; void StartNewFile(); void CheckSize(size_t size); public: - MultiPartArchiveWriter(const std::string& dir, const std::string& fileNamePattern, const ArchiveConfiguration& archiveConfiguration, size_t sizeLimit = 2ull << 30, const std::shared_ptr& logger = nullptr); + MultiPartArchiveWriter(const std::string& dir, const std::string& fileNamePattern, const ArchiveConfiguration& archiveConfiguration, size_t sizeLimit = 2_GiB, bool lazyCreation = false, const std::shared_ptr& logger = nullptr); ~MultiPartArchiveWriter() override;