Я хочу знать, был ли файл открыт пользователем для чтения (двойной щелчок или открытие с помощью …), я кодирую C++
приложение с Qt Creator на Windows, после некоторых исследований я нашел QFileSystemWatche, но это дало мне знать, только если в определенной папке произошли изменения.
void QFileSystemWatcher :: fileChanged (const QString & путь) [сигнал] Этот сигнал испускается, когда файл по указанному пути
изменен, переименован или удален с диска.
Как узнать, был ли файл открыт? или есть способ изменить файл, когда он открывается или закрывается?
Любая идея, пожалуйста!
2 решения:
Вы можете сделать следующую функцию (псевдокод):
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, специфичного для системы), и для его работы могут потребоваться повышенные привилегии. Я тоже не рекомендую …
Других решений пока нет …