nataraj: (Default)
[personal profile] nataraj

Благодаря товарищу 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(). Тогда он при буферезированном выводе постигает тот факт, что места таки нету, а при небуфиризированном, не теряет статус ошибки.

Вот.

Profile

nataraj: (Default)
Swami Dhyan Nataraj

July 2024

S M T W T F S
 123456
789 10111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 20th, 2026 06:04 pm
Powered by Dreamwidth Studios