如何使用C#监控进程的IO活动?

使用FileSystemWatcher,我们可以监视特定文件系统的IO活动,但无论如何要知道哪个正在运行的进程导致该IO?

更具体地说,假设一个正在运行的进程即。 abc.exe正在驱动器D上创建一个文件text.txt。我们可以使用FileSystemWatcher监视已在驱动器D中创建了一个名为text.txt的文件,但我们是否可以通过编程方式确定名为abc.exe的进程正在创建该特定文件在驱动器D?

来自SysInternals的handle.exe是一个命令行工具,允许以编程方式访问哪个程序打开了特定的文件或目录。

 C:\>handle.exe c:\Windows\system32\stdole2.tlb 

生成此输出:

 Handle v3.42 Copyright (C) 1997-2008 Mark Russinovich Sysinternals - www.sysinternals.com devenv.exe pid: 5240 184: C:\Windows\System32\stdole2.tlb Ssms.exe pid: 5000 1F4: C:\Windows\System32\stdole2.tlb 

哪个可以通过编程方式解析。

http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx

不,这是不可能的。 FSW位于文件系统驱动程序堆栈中的非常低级别。 它只能告诉文件系统正在被修改,它不知道由谁。 这非常符合设计,它可能是一个位于世界各地的过程,使用互联网上的VPN连接来使用文件共享。 您的请求没有合理的替代方案。

我会推荐SysInternals实用程序,而不是自己动手。

http://technet.microsoft.com/en-us/sysinternals/bb842062.aspx