【问题标题】:Detect and Log copy/paste/delete/cut operations in File Explorer在文件资源管理器中检测并记录复制/粘贴/删除/剪切操作
【发布时间】:2014-03-24 23:57:11
【问题描述】:

我想检测并记录到文件资源管理器操作,例如复制/剪切/删除/粘贴。

我已阅读有关 FileSystemWatcher 的信息,但我也注意到它存在一些问题,因为没有可用的复制/剪切事件可能会与我想做的任何事情混淆。

操作系统和 FileSystemWatcher 对象将剪切和粘贴操作或移动操作解释为文件夹及其内容的重命名操作。如果您将包含文件的文件夹剪切并粘贴到正在监视的文件夹中,FileSystemWatcher 对象只会将该文件夹报告为新文件夹,而不会将其内容报告为新文件夹,因为它们实际上只是被重命名。

FileSystemWatchercreate filedelete file 事件与 changedrenamed 事件挂钩不能真正帮助我确定它是由用户还是其他进程制作的。此外,我无法 100% 确定文件是否被复制或剪切等发生了什么。

我还需要跟踪“从/到”位置和文件名。

除了FileSystemWatcher 之外,还有其他可以区分这些操作的替代方法吗?

【问题讨论】:

标签: c# .net explorer


【解决方案1】:

我认为FileSystemWatcher 在这种情况下会很有用。您可以使用 Changed 事件,该事件在文件或目录更改时发生 - 就像复制/粘贴操作一样。

请参阅MSDN Documentation 了解此事件以及课程本身。请注意,您还可以将其他事件用于删除/剪切操作。

事件使用FileSystemEventArgs,其中包含FullPathName 的属性。

【讨论】:

  • 在 MSDN 示例中,他们希望我指定目录,观察者应该在哪里观看,我怎样才能使它成为全局?对于每个目录中的每个事件?
  • 如果您希望它对整个磁盘是全局的,您可以将目录设置为 C:\ 或任何根目录。然后在您创建的 FileSystemWatcher 对象上,将 IncludeSubdirectories 属性设置为 true,这将监控所有子目录。
  • 我真的在努力让它发挥作用:),我希望 onChange 事件能真正发挥作用。谢谢
  • 监控整个 C:\ 驱动器(或操作系统硬盘)可能会由于操作系统文件操作而引发相当多的事件。所以这应该是需要考虑的事情。
  • 我终于做到了:),是的,因为我认为我每秒触发毫秒事件是由操作系统而不是由用户完成的:(但我对用户制作的操作感兴趣,我可以以某种方式过滤吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 2018-07-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多