如何处理文件创建过程?

时间:2016-05-17 12:24:12

标签: c# winapi event-handling filesystems kernel

我知道C#中的FileSystemWatcher是如何工作的。

它允许我们在文件已经创建时发出消息 无论哪个程序/进程创建此文件!
或者它允许我们提供有关所创建文件名称的信息,或者“几秒钟前”创建文件的信息......
它还允许我们发送有关已删除或更改的文件的消息。

但它不允许我们创造那种事件:
正在创建文件时,但尚未创建文件!
如果我想以编程方式终止或暂停文件创建过程怎么办?

例如,我想根据它的信息以编程方式处理或终止文件创建过程,该信息告诉我们这个文件的大小是4GB?
无论哪个程序/进程尝试创建此文件!

或者还有另一个问题:
如果我想计算文件创建何时开始以及何时创建,该怎么办?以及这两个日期之间的距离!? 我想你明白我们需要更多关于文件的信息才能开始创建它!

我想您可能知道在Windows 10中,explorer.exe允许我们随时执行此操作!

enter image description here

它甚至允许我们随时恢复复制过程!
因此,如果可以在explorer.exe中执行此操作,那么也可以使用.NET执行此操作 但是忘记了explorer.exe的恢复功能

我只需要取消任何文件创建过程,例如,如果此文件的大小为4GB! 无论哪个程序试图创建文件!

那么请帮我看一下如何在文件创建过程中弹出一个messageBox?

谢谢! 对不起,我的英文不好!

1 个答案:

答案 0 :(得分:1)

在实际执行文件操作之前获得通知的唯一方法是使用文件系统过滤器驱动程序。这是一个内核模式驱动程序,需要用C语言编写。互联网上存在此类驱动程序的示例。自己编写此类驱动程序的另一种方法是使用其中一个包含预先创建的筛选器驱动程序的库,并允许您在用户模式(包括.NET)中处理所有或选择的文件系统请求。我们公司为此提供CallbackFilter产品。