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