2017-07-12 48 views
3

我正在处理图像文件的程序。我遇到的问题是一些图像非常大,我不知道复制过程何时完成。现在代码是用C#编写的,并使用FileSystemWatcher类来监视文件。唯一的问题是当另一个进程与文件一起完成时没有事件。HOWTO:通过Windows中的另一个进程监视文件访问?

当前的逻辑是监视已创建和已更改的事件,而不是等待5秒钟,希望在该时间点复制过程完成。虽然这在我的开发机器上工作,但不幸的是,客户报告整个过程的问题。

几年前,当我编写这段代码时,我的确看到,在较低的层次上,我认为它是DDK SDK的一部分,或者别的什么,可以找到更多关于另一个程序如何访问文件的信息。

任何人都可以谈论这一点,并指出我在正确的方向吗?我确实希望它是C++代码,而不是C#代码。


要回答以下一些问题:

的问题是其他进程正在复制图像转换成目录,我的计划是监控。一旦图像被完全复制,我的程序需要尽快开始处理图像。问题是许多图像有时会复制数百张图像。由于需要尽可能快地处理每个图像,所以系统需要尽快知道图像被完全复制并且可以被处理。

我完全意识到没有办法通过WinSDK来做我想做的事情,但我99.9%确定它可以通过WinDDK,也许我的名字是错的,我使用Google搜索并得到了“Windows驱动程序工具包(WDK)“。我非常确定SysInternals通过使用WDK级别函数来取消所有酷炫技巧的方式。

+0

我想你可以使用DLL注入,并监视调用'fclose()'。但是,如果这是您自己的过程,那么是什么阻止您将文件完成事件输出到stdout? – Frank

+0

我知道没有办法在win32 API中做到这一点。 Sysinternals有一些简洁的工具可以让你窥探谁拥有什么句柄,所以可以查询文件句柄是否仍然打开。事情是,我认为你必须深入到win32下几乎没有记录的空间来做到这一点。但是,如果文件已经以独占访问方式打开,您可以轮询文件,并定期尝试打开文件。如果其他进程仍然有文件锁定,它将不会打开。 – user4581301

回答

-1

你可能感兴趣的是sys内部procmon工具。在监视文件访问的其他功能中,为您提供了大量的细节。 不幸的来源不可用,但这里的a thread about previous version(filemon)由与您的问题类似的人开始。

此外,你可能想看看open source alternative,它可能有你正在寻找的代码。您可以选择use ProcMon as a monitor tool并解析其输出。使用内置的过滤器功能,您可以将日志文件条目限制到特定的文件夹和文件访问事件的类型/数据。

相关问题