2015-08-08 2 views
1

Я пытаюсь реализовать свой собственный логарифмический ротатор (создайте новый файл журнала всякий раз, когда размер файла достигает 10 МБ). Та часть, которая читает стандартный ввод и записывает его в файл заключается в следующем:Труба в мою программу как логарифмический ротатор

fstream file("log.txt", ios::out | ios::app); 
while (std::cin >> lineInput) { 
    file << lineInput; 
} 

Но проблема в том, что водопроводные данные получают разрушены. Вкладки и новые строки всегда теряются. Так, например, если имя моей программы является LogRotator, то команда:

ls | ./LogRotator 

Просто объединяющее все имена файлов вместе, как это:

LogRotatormain.oMakefile 

в то время как выход ls является:

LogRotator main.o Makefile 

Мой вопрос: Как я могу сделать стандартное потоковое сохранение всего, включая вкладки, символы новой строки , и т.д.?

+2

Вы можете пропускаются отформатирован ввода/вывода и использовать для чтения/записи (и подобное) вместо –

ответ

2

Благодаря подсказке Дитера Люкинг, я нашел способ сделать это. Поэтому нужно использовать неформатированное чтение. Следующие работает отлично:

fstream file("log.txt", ios::out | ios::app); 
while (getline(cin,lineInput,'\n')) 
{ 
    file << lineInput; 
} 
+0

Что именно делает, что «неформатированный»? Он настолько отформатирован, что он совершенно не переносится, и это потрясающе, учитывая, что вы используете чистый STL. – Blindy

+0

@Blindy Функция не выполняет никакой строковой обработки и не судит ввод по ее содержимому (кроме случаев, когда разделитель встречается, но разделитель также поставляется вместе с текстом). Он доставляет его, как он был прочитан. Другие процедуры, такие как потоковая передача в 'std :: cin', будут несколько раз модифицировать ввод. Например, это изменило бы '\ n' на новую строку. Вот как я это понимаю. –

+0

Это, безусловно, не происходит, копирование потока осуществляется с помощью 'ifstream :: read' и' ofstream :: write'. Оба 'getline' и' operator <<' изменяют ваши данные, и это полностью документировано в ОС по ОС. – Blindy

Смежные вопросы