QFile: Правильный ответ
Aug. 4th, 2007 02:13 pmБлагодаря товарищу Vadim Suhanov выяснил таки, почему QFile не замечал, что пишет на переполненный диск.
Оказывается что
const int status = f.status();
const QString errorMessage = f.errorString();
f.close();
if (status != IO_Ok) {
log(L_ERROR, "I/O error during writing to file %s : %s", (const char*)f.name().local8Bit(), (const char*)errorMessage
return;
}
при буферизированном выводе в файл и не догадается, что что-то здесь не так, ибо сбрасывать на диск он все будет когда ему скажут f.close, а статус ошибки проверяется до того. (Файл короткий поэтому промежуточных сбросов не происходит)При этом ставить f.close до f.status нельзя, ибо если открыть файл с пренудительным небуферизированным выводом, сказав при открытии ему IO_Raw, то при каждом write'е он будет честно ругаться, но вот f.close по какой-то причине статус ему обнулит (типа закрылся успешно).
Посему, правильным, на мой взгляд решением оказалось, перед f.status поставить f.flush(). Тогда он при буферезированном выводе постигает тот факт, что места таки нету, а при небуфиризированном, не теряет статус ошибки.
Вот.