diff --git a/src/OutputFileHandler.cc b/src/OutputFileHandler.cc index 7d28f28ed8b8f8ff722c55608d0523820ea98872..081360ea6c1348711025b14898d5d3926f218554 100644 --- a/src/OutputFileHandler.cc +++ b/src/OutputFileHandler.cc @@ -1,5 +1,6 @@ #include "OutputFileHandler.h" #include "log.h" +#include <iomanip> void OutputFileHandler::create_output_directory_maybe( std::string &output_directory) { @@ -28,33 +29,26 @@ void OutputFileHandler::create_output_directory_maybe( 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) { + std::string filename = 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, +std::string OutputFileHandler::format_filename(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::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 922f8d43802e22c60c5e5a44a2ce0c0763b9f663..8d8ff9daa871db440a3961e204e70f963e57ba89 100644 --- a/src/OutputFileHandler.h +++ b/src/OutputFileHandler.h @@ -8,38 +8,19 @@ class OutputFileHandler { public: - OutputFileHandler(const std::string filename_base_path, + OutputFileHandler(const std::string base_path, const std::string filename_prefix) - : filename_base_path_(filename_base_path), - filename_prefix_(filename_prefix), - working_files_basepath_(filename_base_path_ + "/" + working_dir_) { - create_output_directory_maybe(working_files_basepath_); + : base_path_(base_path), filename_prefix_(filename_prefix), + 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); @@ -51,9 +32,9 @@ private: // 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_;