From 9d19cc2cfaec74a26ba98421015de68babfba222 Mon Sep 17 00:00:00 2001 From: Johann Dreo Date: Wed, 15 Sep 2010 22:53:15 +0200 Subject: [PATCH] bugfix _keep_existing name ; added an overwriting option to use ios_base::trunc instead of ios_base::app --- eo/src/utils/eoFileMonitor.cpp | 9 +++++++-- eo/src/utils/eoFileMonitor.h | 13 +++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/eo/src/utils/eoFileMonitor.cpp b/eo/src/utils/eoFileMonitor.cpp index f5fcd8d6..f8b66407 100644 --- a/eo/src/utils/eoFileMonitor.cpp +++ b/eo/src/utils/eoFileMonitor.cpp @@ -44,11 +44,16 @@ void eoFileMonitor::printHeader() eoMonitor& eoFileMonitor::operator()(void) { - ofstream os(filename.c_str(), ios_base::app); + ofstream os(filename.c_str(), + overwrite ? + ios_base::out|ios_base::trunc // FIXME does not seems to work + : + ios_base::out|ios_base::app + ); if (!os) { - string str = "eoFileMonitor: Could not append to " + filename; + string str = "eoFileMonitor: Could not write to " + filename; throw runtime_error(str); } diff --git a/eo/src/utils/eoFileMonitor.h b/eo/src/utils/eoFileMonitor.h index ce243a98..45d5b0fc 100644 --- a/eo/src/utils/eoFileMonitor.h +++ b/eo/src/utils/eoFileMonitor.h @@ -52,21 +52,23 @@ public : * @param _filename complete filename to write to * @param _delim delimiter string to use between each item of the registered vector (e.g. of eoStats) * @param _keep_existing if true, overwrite any existing file with the same name prior to any output - * @param _header print the header (with the descriptions of registered eoStats) at the beginning of the file + * @param _header print the header (with the descriptions of registered eoStats) at the beginning of the file (WARNING: true will discards header printing) */ eoFileMonitor( std::string _filename, std::string _delim = " ", bool _keep_existing = false, - bool _header=false + bool _header = false, + bool _overwrite = false ) : filename(_filename), delim(_delim), keep(_keep_existing), header(_header), - firstcall(true) + firstcall(true), + overwrite(_overwrite) { - if (!_keep) { + if (!_keep_existing) { std::ofstream os (filename.c_str ()); if (!os) { @@ -108,6 +110,9 @@ private : //! flag to avoid calling twice operator()(void) bool firstcall; + + //! erase the entire file prior to writing in it (mode eos_base:: + bool overwrite; }; #endif