Lua检查文件是否打开

时间:2011-07-05 22:48:09

标签: lua

我正在尝试编写lua文件脚本以检查某个文件是否已打开。然后我希望它关闭该文件,如果它是打开的。我知道如何检查文件是否存在,但我需要知道如何检查文件是否打开,这意味着文件正在运行。

3 个答案:

答案 0 :(得分:5)

Lua,就像C,C ++和几乎所有其他语言一样,只能关闭它打开的文件本身。您无法关闭其他人打开的文件(不是标准的Lua调用);这将是令人难以置信的粗鲁。

因此,您无法测试是否有其他人打开了文件。你也不能关闭他们的文件。可能会有系统API调用来执行此操作,但您必须自己让Lua脚本访问这些API。 Lua的标准库无法做到这一点。

答案 1 :(得分:1)

听起来您想要检查哪个程序打开了给定文件。 首先想到的是在linux上解析lsof的输出。

fd = io.popen("lsof path/to/my/file")
fileopened = (#fd:read("a*") > 0)

答案 2 :(得分:0)

这种做法很糟糕,但它有效:

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")