2009-11-12 59 views
1

我有几个项目需要我监视文件,然后在写入磁盘时对其进行编辑。我有一种感觉,我正在寻找的操作方式与防病毒工具的操作方式相同。让我来提供更多详细信息: 1)我需要捕获Office应用程序保存的所有文件,然后将特定公司标记添加到每个文档的页眉/页脚,因为它们正被写入磁盘。 2)我需要立即知道何时将可编辑的文件(几乎任何类型)写入磁盘,以便我可以执行一些扫描操作来检查文件内容是否符合某些公司策略。C#解决方案用于在写入/修改文件时分析文件

简而言之,您可以看到我需要在写入磁盘时处理任何用户文件。

这是我的问题。我想用C#来完成这项任务,但我不确定它是否有能力满足我的要求。我在网上看到的所有东西都是针对较低级别的C编程的,我特别想避免由于这个项目的时间限制。任何人都知道如何轻松地在C#中执行此任务?它是否可行(即语言太高,语言太慢等)?

+0

是否可以将元数据放入Normal.Dot,并强制每个人使用Normal.Dot的版本? – 2009-11-12 04:40:37

回答

0

你看过FileSystemWatcher了吗?

0

C#可以很容易地做到这一点。看看FileSystemWatcher班(http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)。

+0

FileSystemWatcher会告诉你什么时候文件被修改,但是你必须在你想要观看的每个**文件夹中设置一个。 – 2009-11-12 04:41:28

+0

这很可能是任何解决方案。无论如何,除了性能影响外,没有什么能够阻止您在整个驱动器上执行递归监视。 – 2009-11-12 06:05:36

1

表现不会是问题。我想我会质疑整个过程 - 这听起来像是一场灾难。只需几分钟,您就可以使用FileSystemWatcher轻松地在C#中进行一些操作,但这会带来很多问题。 AV软件在锁定文件和搞砸各种软件方面已经够糟了,它甚至不试图修改文件。你怎么知道另一个应用程序什么时候写完文件?当你将文件锁定并由于无法访问而导致其他内容中断时,你会做什么?

+0

我在某处读到,由于缓冲区限制,它只能监视目录中的80个文件。这对我来说不会真正放大。 AV解决方案如何做到这一点?他们是否替换较低级别的DLL以便参与单个文件事务? – Smurf 2009-11-13 03:17:21

+0

不是真的,在FSW中遇到问题的时候,目录中的许多文件都会一次全部更改 - 它可能会丢失更改。 AV使用存储过滤器驱动程序和内存中的填补I/O库(取决于供应商)。您无法(合法)在托管代码中执行此操作。我之前做过它,但这是一个非常糟糕的主意,而且你必须成为Wizard先生才能继续运行。说真的,我会重新考虑整个方法(将事件保存为办公室插件或其他东西)。事后这样做对于真正的用户来说将是一场噩梦。修补Office文档道具无论如何都需要独占访问文件。 – nitzmahone 2009-11-13 03:45:26

+0

You raise good points ...改变想法:*监视文件的创建或修改*分析文件的内容 - Office是一个例子,但我们需要监视几乎任何文件类型*要么提出警报,如果某些内容存在,或者可能只是阻止更改。我必须要求更多的帮助;-):1)是否有用于任何文件类型的内容扫描的库?例如。我想使用正则表达式查询来查找文档或HTML文件中的敏感文本2)是否有方法基于FileSystemWatcher输出“撤消”文件操作。例如。如果文件内容策略被破坏,我可以撤消文件副本吗? – Smurf 2009-11-13 04:23:06