【问题标题】:Lua check if a file is open or notLua 检查文件是否打开
【发布时间】:2015-04-01 02:29:39
【问题描述】:

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

【问题讨论】:

  • 定义“文件正在运行”。

标签: lua


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 如果你在 linux 上并且你绝对确定你不会伤害任何人(或者你的 BSOF 而你不在乎),或者是你自己的进程打开了一个文件,你可以用fuser杀死应用程序
    【解决方案3】:

    有点老套的方法,但它确实有效:

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

    【讨论】:

      猜你喜欢
      • 2013-06-23
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多