有一个包含 8GB 小 (1-5MB) 文件的文件夹。有一个应用程序使用这些文件之一。我需要确定当前正在使用哪个文件。
我认为它一直在监听该过程并试图捕捉对 winApi 的调用以打开文件。或者遍历所有文件并尝试打开它们进行写入。
这两种选择都有些不合理。有人可以告诉我如何处理我的情况吗?
有一个包含 8GB 小 (1-5MB) 文件的文件夹。有一个应用程序使用这些文件之一。我需要确定当前正在使用哪个文件。
我认为它一直在监听该过程并试图捕捉对 winApi 的调用以打开文件。或者遍历所有文件并尝试打开它们进行写入。
这两种选择都有些不合理。有人可以告诉我如何处理我的情况吗?
这里有几个选项。
获取已使用重启管理器(示例)打开文件的每个文件的进程列表。
解析命令的输出
openfiles /query,显示所有当前打开的文件的列表,并过滤必要的文件(您必须首先通过命令启用本地文件的输出openfiles /local on,然后重新启动系统)。如您所说,尝试使用打开文件
FileShare.None,并捕获异常自己看看哪种情况最适合。如果文件很多,所有方法都非常繁重。
笔记。openfiles 实用程序(据说)使用函数的未记录特性
NtQuerySystemInformation和描述符的内部结构分析来获取本地打开文件的列表,因此您自己实现相同的功能太困难了。(使用自定义驱动程序的 C++ 解决方案示例。)