Луа проверить, открыт файл или нет - PullRequest
3 голосов
/ 06 июля 2011

Я пытаюсь написать скрипт lua, чтобы проверить, открыт ли определенный файл.Затем я хочу закрыть этот файл, если он открыт.Я знаю, как проверить, существует ли файл, но мне нужно знать, как проверить, открыт ли файл, то есть файл запущен.

Ответы [ 3 ]

5 голосов
/ 06 июля 2011

Lua, как и C, C ++ и почти любой другой язык, может закрывать только те файлы, которые он открывает сам . Вы не можете закрыть файлы, открытые другими людьми (кроме стандартных вызовов Lua); это было бы невероятно грубо.

Таким образом, вы не можете проверить, открыт ли файл кем-то еще. Вы также не можете закрыть их файл. Для этого могут быть системные вызовы API, но вам придется предоставить Lua-сценариям доступ к этим API самостоятельно. Стандартные библиотеки Lua не могут этого сделать.

1 голос
/ 06 июля 2011

Звучит так, будто вы хотите проверить, какие из программ имеют открытый файл. Первое, что приходит на ум, - это анализ выходных данных lsof на linux.

fd = io.popen("lsof path/to/my/file")
fileopened = (#fd:read("a*") > 0)
0 голосов
/ 31 марта 2015

Хакерский способ сделать это, но он работает:

processname = "process_name_here.exe"

filedata = io.popen("tasklist /NH /FO CSV /FI \"IMAGENAME eq "..processname.."\"")
output = filedata:read()
filedata:close()

if output ~= "INFO: No tasks are running which match the specified criteria." then
    -- Program is running. Close the program
    os.execute("taskkill -im "..processname)
else
    -- Program is not running
end

Просто убедитесь, что «process_name_here.exe» заменено именем процесса, которое отображается в диспетчере задач

В качестве альтернативы вы можете просто использовать это, чтобы закрыть его, не проверяя, действительно ли он работал:

os.execute("taskkill -im process_name_here.exe")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...