У меня есть следующий код, работая на 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, но он не работал.
Какие-либо предложения?
Если вы проверяете свой файл, выполняя cat
, это может быть ваша оболочка, которая неправильно настроена и не печатает строку, если нет конца строки.
std :: endl
добавляет сброс \ n
и .
Деструктор должен промыть и закрыть файл.
Я почти уверен, что ошибка в другом месте, либо
1) Вы не проверяете в нужный момент времени. В какой момент вы сравниваете содержимое файла, "после" выхода, или вы устанавливаете точку останова перед выходом программы и затем проверяете содержимое файлов?
2) Каким-то образом программа аварийно завершается перед выходом?
.
file << "Hello world" << std::endl;
работает?
endl вставляет новую строку и очищает буфер. Это то, о чем вы имели в виду, когда сказали, что уже пытались его смыть?
Не знаю, пробовали ли вы это, но вам следует сделать:
file << "Hello World" << std::flush;
Обновить ; Я оставляю этот ответ здесь из-за полезных комментариев
На основании отзывов я изменю свой совет: вам не нужно явно вызывать std :: flush
(или file.close ()
в этом отношении), потому что деструктор сделает это за вас.
Кроме того, вызов flush явно форсирует операцию ввода-вывода, которая может быть не самым оптимизированным способом. Было бы лучше обратиться к базовым iostreams и операционной системе.
Очевидно, проблема OP не была связана с вызовом или не вызовом std :: flush
и, вероятно, была связана с попыткой чтения файла до вызова деструктора файлового потока.