【发布时间】:2015-04-01 02:29:39
【问题描述】:
我正在尝试编写一个 lua 文件以检查某个文件是否已打开。然后我希望它关闭该文件,如果它是打开的。我知道如何检查文件是否存在,但我需要知道如何检查文件是否打开,这意味着文件正在运行。
【问题讨论】:
-
定义“文件正在运行”。
标签: lua
我正在尝试编写一个 lua 文件以检查某个文件是否已打开。然后我希望它关闭该文件,如果它是打开的。我知道如何检查文件是否存在,但我需要知道如何检查文件是否打开,这意味着文件正在运行。
【问题讨论】:
标签: lua
Lua 与 C、C++ 和几乎所有其他语言一样,只能关闭它打开的文件自身。你不能关闭其他人打开的文件(不是标准的 Lua 调用);这将是难以置信粗鲁。
因此,您无法测试文件是否被其他人打开。你也不能关闭他们的文件。您可能需要调用系统 API 来执行此操作,但您必须自己授予 Lua 脚本访问这些 API 的权限。 Lua 的标准库无法做到这一点。
【讨论】:
听起来您想检查是否有任何程序打开了给定文件。 首先想到的是在 linux 上解析 lsof 的输出。
fd = io.popen("lsof path/to/my/file")
fileopened = (#fd:read("a*") > 0)
【讨论】:
fuser杀死应用程序
有点老套的方法,但它确实有效:
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")
【讨论】: