【问题标题】:How do I determine whether a file is in use?如何确定文件是否正在使用?
【发布时间】:2009-11-03 22:59:07
【问题描述】:

如何确定文件是通过 VBScript 还是批处理文件使用?它可以是一个单独的实用程序。

我看过Handle,但有时句柄与文件名不一致,例如一些 DLL,并且它不进行部分搜索(尽管我大概可以在其完整输出上使用一些文本处理实用程序来处理这方面的事情)。

【问题讨论】:

  • 这是“被任何其他进程使用”还是“被特定进程使用”,即您控制的进程?

标签: file vbscript batch-file


【解决方案1】:

您是否可以简单地尝试对文件执行任何您想要执行的操作,并在它因共享冲突而失败时报告错误?

“请求宽恕比获得许可更容易。” - 格蕾丝·霍珀

或者,如果您想提前知道尝试执行破坏性操作是否会成功,您可以尝试执行需要相同权限的非破坏性操作。因此,如果您想知道是否可以覆盖文件,请尝试打开它进行追加,但不要写入任何内容。

无论您做什么,都需要注意竞争条件 - 如果其他人在您的测试和实际操作之间打开文件怎么办?

【讨论】:

    【解决方案2】:

    试试这个:

    @echo off
    echo.N|copy /-y NUL "%~1">NUL
    if not errorlevel 1 echo not in use
    if errorlevel 1 echo in use
    

    信用:DosTips.com :IsFileOpen

    【讨论】:

    • 这绝对行不通。它将所有内容报告为“未使用”。
    • 有几种“文件打开”类型;我认为这种方法只适用于独占锁,因为我使用Access LDB 文件进行了测试,它报告“正在使用”;我正在运行 Windows 2008
    【解决方案3】:

    我最终使用的是ListDLLs。运行 "listdlls -d | find /c "pid" > temp.txt" 然后测试 temp.txt 中是否有任何数据似乎可以确定文件是否被成功使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-06
      • 2021-07-25
      • 2012-08-31
      • 2011-05-04
      • 2022-07-26
      • 2010-11-26
      • 2011-02-16
      • 2010-10-30
      相关资源
      最近更新 更多