ofstream не сбрасывает

У меня есть следующий код, работая на Suse 10.1 / G ++ 4.1.0, и он не пишет в файл:

#include <fstream>
#include <iostream>

int main(){
    std::ofstream file("file.out");
    file << "Hello world";
}

Файл правильно создан и открыт, но пуст. Если я изменяю код на:

#include <fstream>
#include <iostream>

int main(){
    std::ofstream file("file.out");
    file << "Hello world\n";
}

(добавьте a \n к тексту), это работает. Я также пытался сбросить ofstream, но он не работал.

Какие-либо предложения?

9
задан Tim Cooper 30 August 2011 в 14:36
поделиться

4 ответа

Если вы проверяете свой файл, выполняя cat , это может быть ваша оболочка, которая неправильно настроена и не печатает строку, если нет конца строки.
std :: endl добавляет сброс \ n и .

8
ответ дан 4 December 2019 в 11:39
поделиться

Деструктор должен промыть и закрыть файл.

Я почти уверен, что ошибка в другом месте, либо

1) Вы не проверяете в нужный момент времени. В какой момент вы сравниваете содержимое файла, "после" выхода, или вы устанавливаете точку останова перед выходом программы и затем проверяете содержимое файлов?

2) Каким-то образом программа аварийно завершается перед выходом?

.
5
ответ дан 4 December 2019 в 11:39
поделиться

file << "Hello world" << std::endl;

работает?

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

0
ответ дан 4 December 2019 в 11:39
поделиться

Не знаю, пробовали ли вы это, но вам следует сделать:

file << "Hello World" << std::flush;

Обновить ; Я оставляю этот ответ здесь из-за полезных комментариев

На основании отзывов я изменю свой совет: вам не нужно явно вызывать std :: flush (или file.close () в этом отношении), потому что деструктор сделает это за вас.

Кроме того, вызов flush явно форсирует операцию ввода-вывода, которая может быть не самым оптимизированным способом. Было бы лучше обратиться к базовым iostreams и операционной системе.

Очевидно, проблема OP не была связана с вызовом или не вызовом std :: flush и, вероятно, была связана с попыткой чтения файла до вызова деструктора файлового потока.

5
ответ дан 4 December 2019 в 11:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: