C ++ новичок: мой цикл должен ИЗМЕНИТЬ строку, а затем распечатать строку в файл.Но это ДОБАВЛЕНИЕ в строку - PullRequest
3 голосов
/ 12 июня 2011

Я написал код C ++ для выполнения расчетов.В коде есть цикл.В конце каждого цикла я хочу:

1) Получить время, результат вычисления.

2) Создать имя для файла.Имя должно содержать время.

3) Напечатать имя файла во внешний файл.Каждый новый цикл должен перезаписывать имя файла из предыдущего цикла.

Первая проблема, с которой я столкнулся, заключалась в том, что я не мог удалить имя файла OLD.Поэтому, когда мои вычисления были закончены, имя было (например): accountForRestartFile_0.0005476490.004925880.01763170.04375820

вместо: analysisForRestartFile_04375820

Я обновил этот вопрос, чтобы включить совет Мэт.Спасибо, Мат.Но сейчас я ничего не получаю во внешнем файле.Кто-нибудь может увидеть, где я иду не так?Буду очень признателен за любой совет.

// Above loop:
  std::string  filename = "calculationForRestartFile_";  // Part of the file name that ALL files should have
  ofstream fileNameAtHighestTimeStream;    

  std::string       convertedToString;                  // This and the line below:
  std::stringstream storeNumberForConversion;           // For storing a loop number/time as a string

// Inside loop:
    storeNumberForConversion << global_time << flush;       // Turn the time/loop number into a string that can be added to the file name for a particular loop
    convertedToString = storeNumberForConversion.str();

    fileNameAtHighestTimeStream.open ("externalFile", ios::out | ios::app ); 
    fileNameAtHighestTimeStream << filename << convertedToString << endl;    // Append the time/loop name to the file name and write to the external file
    fileNameAtHighestTimeStream.close();

// End loop

Ответы [ 2 ]

5 голосов
/ 12 июня 2011

Проблема в том, что эта строка добавляет к вашему stringstream внутри цикла.Вы никогда не сбрасываете его содержимое.

storeNumberForConversion << global_time << flush;

Самое простое, что нужно сделать, это переместить объявление storeNumberForConversion внутри цикла, чтобы оно было пустым непосредственно перед его использованием.

Или вы можете сбросить его после операции форматирования.

storeNumberForConversion.str( std::string() );
1 голос
/ 12 июня 2011

Почему бы просто не записать время в файл напрямую?

...