for(int n=0;n<=10;n++){
if (!(myfile << "index="<<n<<endl))
throw std::runtime_error("WRITE FAILED")
sleep(1);
}
Если по какой-либо причине происходит сбой std::ostream
, он устанавливает бит состояния, который проверяется, тогда std::stream
находится в логическом контексте.Это так же, как вы проверяете, правильно ли std::istream
считывает данные в переменную.
Однако это то же самое, что и rdstate()
, который, как вы говорите, вы пробовали.Если это так, запись попала в буфер.endl
, который очищает буфер программ, показывает, что он находится в буфере операционной системы.Оттуда вам придется использовать специфичные для ОС вызовы, чтобы заставить его очистить буфер.
[Редактировать] Согласно http://msdn.microsoft.com/en-us/library/17618685(v=VS.100).aspx, вы можете принудительно выполнить сброс с помощью _commit
, если у вас есть дескриптор файла.Я не могу найти такую гарантию для std::ostream
s.