Как узнать, что файл был открыт? QT

Я хочу знать, был ли файл открыт пользователем для чтения (двойной щелчок или открытие с помощью …), я кодирую C++ приложение с Qt Creator на Windows, после некоторых исследований я нашел QFileSystemWatche, но это дало мне знать, только если в определенной папке произошли изменения.

void QFileSystemWatcher :: fileChanged (const QString & путь) [сигнал] Этот сигнал испускается, когда файл по указанному пути
изменен, переименован или удален с диска.

Как узнать, был ли файл открыт? или есть способ изменить файл, когда он открывается или закрывается?

Любая идея, пожалуйста!

3

Решение

2 решения:

  • Использование Qt

Вы можете сделать следующую функцию (псевдокод):

function is_open(file)
handle = open file to write
if(handle is ok)
close file
return true
else
return false

Затем вы вызываете его один раз в секунду и излучаете сигнал fileOpened(const QString& file) всякий раз, когда is_open(t-1) == false && is_open(t) == true, где t это время.

Тем не менее, это решение может быть медленным и может привести к некоторому увеличению числа операций ввода-вывода, особенно если файл находится на удаленном сервере. Это также может привести к преждевременному износу диска / SSD, поэтому я не рекомендую это решение.

  • Использование системного API

Вы можете получить список всех файловых дескрипторов всех процессов, а затем проверить, содержит ли он дескриптор файла, который вы хотите отслеживать. Опять же, вам придется делать это х раз в секунду. Это замедлит ваш компьютер; на практике он не является переносимым (необходимый код в значительной степени зависит от API, специфичного для системы), и для его работы могут потребоваться повышенные привилегии. Я тоже не рекомендую …

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]