Запись в текстовый файл без перезаписи - PullRequest
2 голосов
/ 11 ноября 2010

Я выполняю численное моделирование гравитации в C ++ и хочу подкреплять свои результаты каждый раз, когда подсчитывается один шаг.

Однако, как я это делаю сейчас, программа всегда перезаписывает файл. Думаю, я смогу решить проблему, сохранив текст в другом файле или переменной, но мне интересно, есть ли более простой способ открыть текстовый файл, чтобы я не перезаписывал его.

Мой текущий «резервный код» выглядит так:

fstream log;
log.open ("log.txt");
if (log.is_open())
{...
  ...
  log.close();
}

Ответы [ 4 ]

9 голосов
/ 11 ноября 2010

Открыть поток в режиме добавления:

log.open("log.txt", fstream::app);

Это просто добавит новый вывод к существующему, предоставив вам один большой файл журнала, который со временем увеличивается.

Одно предложение(если вы этого еще не делаете) - это включить в данные регистрации некоторую временную метку, чтобы при чтении файла можно было сопоставить зарегистрированные данные с прогоном программы.

3 голосов
/ 11 ноября 2010

Используйте log.open("log.txt", fstream::app) для добавления в файл.

Прочитайте эту ссылку для получения дополнительной информации.

Если вам нужен сложный механизм для ведения журнала и отметки времени, естьполезный SO пост о каркасе логирования для C ++. Пантеос получил принятый ответ.

0 голосов
/ 03 октября 2016

Поскольку у автора, похоже, возникли проблемы с предлагаемыми ответами, я добавлю еще один.

ofstream log;
log.open("log.txt", ofstream::app);

Я думаю, работа с явным потоком

ifstream

и

ofstream

иногда работает лучше. Хотя я не знаю причину.

0 голосов
/ 11 ноября 2010

Установите режим добавления.Смотрите это: http://www.cplusplus.com/reference/iostream/fstream/open/

...