Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [QT] QFile и монопольный захват


Автор: xbarmaglot 30.9.2015, 17:36
В отдельном потоке постоянно вычитывается директория и обрабатываются новые фалы.
Но если в директорию копируется очень большой файл, то происходит попытка чтения еще не
скопированного файла - получается чтение битого файла.

В WInAPI можно было попытаться монопольно открыть файл, для того, чтобы понять, что он переписался.
Можно в QT отследить данную проблему ?

З.Ы. Есть QLockFile, но при попытке залочить файл он его стирает...

Автор: borisbn 30.9.2015, 17:47
1) Можно пытаться открыть его на запись - ( QIODevice::WriteOnly | QIODevice::Append ). Если не дали, то файл ещё пишется.
2) Если файл записывает твоя же программа, то есть два варианта:
2.1) После окончания записи файла класть рядом с ним файл-квитанцию с таким же именем, но с другим расширением, например *.done (в программе, которая мониторит каталог нужно ждать только файлы *.done, и когда найдёшь - читать файл с аналогичным именем, но с "боевым" расширением, а *.done - удалять)
2.2) Писать файл с расширением *.tmp, а по окончании записи переименовывать с нужным расширением.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)