diff --git a/src/OutputFile.h b/src/OutputFile.h index c94ae55063f9609417802adfc9ba0e8a2a2709a3..7d0d589a2b3a8d71a0db15cd26a2b3a90658fd5d 100644 --- a/src/OutputFile.h +++ b/src/OutputFile.h @@ -6,6 +6,7 @@ #include <atomic> #include <cstdint> #include <cstdio> +#include <filesystem> #include <fstream> #include <iostream> #include <string> @@ -14,6 +15,9 @@ #include <vector> #include "cmssw/FRDFileHeader_v2.h" +#include "log.h" + +namespace fs = std::filesystem; class OutputFile { public: @@ -53,13 +57,32 @@ class OutputFile { } } + std::string GetFullPath() const { return fs::path(rundir_) / filepath_ / fileName_; } + + void Rename(const std::string& new_path) const { + fs::path from = GetFullPath(); + fs::path to = new_path; + + try { + fs::rename(from, to); + } catch (fs::filesystem_error& err) { + LOG(FATAL) << "Error renaming file: " << err.what(); + } + } + + void Flush() { + if (file_.is_open()) { + file_.close(); + } + } + void setFileHeader(FRDFileHeader_v2 fileHeader) { fileHeader_ = fileHeader; } uint32_t Lumisection() { return lumisection_; } uint32_t Index() { return index_; } private: - FILE* filePtr_; + std::string filepath_; std::string fileName_; FRDFileHeader_v2 fileHeader_; uint32_t lumisection_;