Qt, QFile: Ничнего не понимаю.
Jul. 27th, 2007 04:14 pmЛюбимая мной программа теряет конфиг, если на диске закончилось место.
Полез разбираться...
Проблема по сути в том, что при перезаписи конфига, сим не просекает фишку, что во время записи произошла проблема, стирает старый вариант, а новый, вариант, оказывается неполным. И все... конфига нет.
Читаю код. Из кода узнаю, что в qt у объекта файл есть метод writeBlock который пишет строку в файл, и возвращает кол-во реально записанных байт.
Форматирую небольшой файлик в ext3, монтирую, проверяю на кошечке... Таки да, супер, когда место кончается, writeBlock начинает возвращать 0 когда место заканчивается...
Вставляю оною проверку в сим. (Там они анализировали не статус каждой попытки записать, а статус всего процесса целиком) На выходе имеем хрен: writeBlock уверяет, что все записывается успешно, хотя на разделе нет ни килобайта свободного места. И статус всего рпоцесса записи f.status() -- IO_Ok)
Самое забавное, что с другим конфигом (там их несколько) все проходит нормально. Оно получает статус IO_WriteError и не херит предидущую версию конфига...
В чем разница -- я не понимаю...
Все очень загадочно...
Пойду в форум Лора пожалуюсь, может кто что умное скажет...
UPDATE: Правильный ответ тут: http://shaplov.livejournal.com/302225.html
Полез разбираться...
Проблема по сути в том, что при перезаписи конфига, сим не просекает фишку, что во время записи произошла проблема, стирает старый вариант, а новый, вариант, оказывается неполным. И все... конфига нет.
Читаю код. Из кода узнаю, что в qt у объекта файл есть метод writeBlock который пишет строку в файл, и возвращает кол-во реально записанных байт.
Форматирую небольшой файлик в ext3, монтирую, проверяю на кошечке... Таки да, супер, когда место кончается, writeBlock начинает возвращать 0 когда место заканчивается...
Вставляю оною проверку в сим. (Там они анализировали не статус каждой попытки записать, а статус всего процесса целиком) На выходе имеем хрен: writeBlock уверяет, что все записывается успешно, хотя на разделе нет ни килобайта свободного места. И статус всего рпоцесса записи f.status() -- IO_Ok)
Самое забавное, что с другим конфигом (там их несколько) все проходит нормально. Оно получает статус IO_WriteError и не херит предидущую версию конфига...
В чем разница -- я не понимаю...
Все очень загадочно...
Пойду в форум Лора пожалуюсь, может кто что умное скажет...
UPDATE: Правильный ответ тут: http://shaplov.livejournal.com/302225.html