diff --git a/src/OutputFileHandler.cc b/src/OutputFileHandler.cc index 9afd8e39544d14db6a1bdfbb40ae2b6464bb2a3a..2e620690e5df6156a2bbbf88a8bc1ff981df8078 100644 --- a/src/OutputFileHandler.cc +++ b/src/OutputFileHandler.cc @@ -1,5 +1,7 @@ #include "OutputFileHandler.h" +#include <iomanip> + #include "log.h" void OutputFileHandler::create_output_directory_maybe(std::string &output_directory) { @@ -28,30 +30,24 @@ void OutputFileHandler::create_output_directory_maybe(std::string &output_direct void OutputFileHandler::open_file(uint32_t index, uint32_t run) { // Create a new file create_output_directory_maybe(working_files_basepath_); - std::string current_filename_a = - output_directory + "/" + - format_run_file_stem(my_output_filename_prefix, current_run_number, index_); std::string filename = - output_directory + "/" + - format_run_file_stem(my_output_filename_prefix, control.run_number, index_); - LOG(INFO) << "opening file with index " << index_; - outFile.setFile(fopen(filename.c_str(), "w")); - outFile.setIndex(index_); - if (outFile.getFile() == NULL) { + working_files_base_path_ + "/" + format_filename(control.run_number, index); + LOG(TRACE) << "opening file with index " << index; + current_file_ = fopen( filename.c_str(), "wbx" )); + if (current_file_ == NULL) { std::string err = tools::strerror("ERROR when creating file '" + current_filename_a + "'"); LOG(ERROR) << err; throw std::runtime_error(err); } + current_index_ = index; } /* * Create a properly formatted file name - * TODO: Change to C++ */ -std::string OutputFileHandler::format_filename(std::string &path, uint32_t run_number, - uint32_t index) { - char run_order_stem[PATH_MAX]; - snprintf(run_order_stem, sizeof(run_order_stem), "%s_%06d_%06d.dat", filename_prefix.c_str(), - run_number, file_count); - return std::string(run_order_stem); +std::string OutputFileHandler::format_filename(uint32_t run_number, uint32_t index) { + std::ostringstream ofilename; + ofilename << filename_prefix_ << "_" << std::setfill(0) << std::setw(6) << run_number << "_" + << index << ".dat"; + return ofilename.str(); } diff --git a/src/OutputFileHandler.h b/src/OutputFileHandler.h index c03b3872c8251e318ac874237e4ce6de13e24318..f4adba1d4721352119e2ec15985a40abf3b78bb1 100644 --- a/src/OutputFileHandler.h +++ b/src/OutputFileHandler.h @@ -7,35 +7,21 @@ class OutputFileHandler { public: - OutputFileHandler(const std::string filename_base_path, const std::string filename_prefix) - : filename_base_path_(filename_base_path), + OutputFileHandler(const std::string base_path, const std::string filename_prefix) + : base_path_(base_path), filename_prefix_(filename_prefix), - working_files_basepath_(filename_base_path_ + "/" + working_dir_) { - create_output_directory_maybe(working_files_basepath_); + working_files_base_path_(filename_base_path_ + "/" + working_dir_), + current_run_number_(0), + current_file_(0), + current_index_(-1) { + create_output_directory_maybe(working_files_base_path_); } virtual ~OutputFileHandler() {} void open_file(uint32_t index, uint32_t run); // Used for fixedNorbits per file option - { - // Create a new file - std::string output_directory = my_output_filename_base + "/" + working_dir; - create_output_directory(output_directory); - std::string current_filename_a = - output_directory + "/" + - format_run_file_stem(my_output_filename_prefix, current_run_number, index_); - std::string filename = - output_directory + "/" + - format_run_file_stem(my_output_filename_prefix, control.run_number, index_); - LOG(INFO) << "opening file with index " << index_; - outFile.setFile(fopen(filename.c_str(), "w")); - outFile.setIndex(index_); - if (outFile.getFile() == NULL) { - std::string err = tools::strerror("ERROR when creating file '" + current_filename_a + "'"); - LOG(ERROR) << err; - throw std::runtime_error(err); - } - } + + std::string format_filename(uint32_t run_number, uint32_t index); private: void create_output_directory_maybe(std::string &output_directory); @@ -47,9 +33,9 @@ class OutputFileHandler { // filename static constexpr std::string journal_file_{"index.journal"}; - std::string filename_base_path_; + std::string base_path_; std::string filename_prefix_; - std::string working_files_basepath_; + std::string working_files_base_path_; uint32_t current_run_number_; FILE *current_file_; int32_t current_index_;