Я пытаюсь записать в существующий файл с QFile, который работает как ожидалось. Однако проблема в том, что если файл открыт в Excel, запись в файл из моей программы завершится неудачно.
Я пытаюсь проверить разрешения с помощью QFileInfo и имею все права на чтение и запись для файла. Тест
bool opened = file-> open (QIODevice :: WriteOnly)
возвращает истину.
Та же проблема не возникает, когда файл открывается с помощью notepad ++.
Как я могу проверить, заблокирован ли файл и не может быть записан?
Excel блокирует свои открытые файлы для эксклюзивного использования. Вы не можете написать в открытый файл, переместить или удалить его. Нет возможности обойти эту блокировку.
Смотрите также: Запись в заблокированный файл независимо от статуса блокировки
Когда вы используете функцию QFile :: write, она возвращает количество записанных байтов или -1, если произошла ошибка.
Если вы проверите код возврата из функции записи, вы сможете использовать его, чтобы определить, что файл заблокирован другим процессом.
Вызов QFile :: open возвращает без ошибок, потому что вы все равно можете получить действительный дескриптор файла, даже если другой процесс заблокировал его, не позволяя вам одновременно писать в него.