访问文件在删除前

7
当使用FileSystemWatcher.OnDeleted事件时,是否有可能在文件被删除前访问该文件?我正在文件元数据中存储一些有关文档本身的数据,并且需要在文件被删除之前获取这些信息。如果可能,如何使用或不使用FileSystemWatcher完成此操作?更新:我意识到在文件中存储数据是不好的,因为在文件被删除时无法访问它。解决方案:重新编写我的应用程序,将数据存储在本地数据库(sqlite / xml或类似的东西)中,因为当创建/重命名/更新/删除文件时,我可以获取完整的路径和名称,因此更容易更新文件的数据库记录。感谢大家提供的想法和建议!

我差不多想说不行,因为事件是在文件被删除后才触发的。我认为FSW直到事件完成之后才能知道该事件,因为这意味着需要触发并捕获一个预删除事件,然后允许您在文件上创建锁定。 - Mike McMahon
我认为仅使用 FileSystemWatcher 是不可能的。我不确定Windows是否允许更低级别的钩子(尽管我怀疑这一点)。 - dlev
你可以从事件处理程序中获得全名,用它来恢复文件,使其隐形,读取并删除它。这种方法虽然有些儿戏,但仍然是可行的:http://stackoverflow.com/questions/2837307/recovering-deleted-file-on-windows - nawfal
@nawfal 那样做行不通。如果你试图在事件处理程序中访问文件,你会得到一个 FileNotFoundException - GETah
在Win32中是否可以创建一个文件的硬链接?如果可以,您可以将文件的硬链接到另一个(临时)文件,读取临时文件,然后删除它;这样两个文件应该都已经被操作系统删除了。 - David R Tribble
显示剩余2条评论
2个回答

2
当使用FileSystemWatcher.OnDeleted事件时,是否可能在文件被删除之前访问该文件?
该事件是在文件删除后触发的,所以当此事件被触发时,您将无法访问该文件。
如果有什么想法可以完成这个任务(即在文件被删除之前访问该文件)吗?
我会使用OnChanged事件,该事件在每次文件更改时触发。基本上,您可以每次文件更改时读取文件元数据。如果文件经常更新,这可能有点麻烦,但应使您能够在删除文件之前获得最新的元数据。

如果文件未更改且未删除,则仍然可以从中读取内容。但是,这种解决方案实际上不起作用。 - nawfal
@nawfal 除了可以在 OnCreate 事件中检索文件描述符数据之外,我不知道 OP 可以从空文件中读取什么 :) - GETah
@GET文件不是空的,它已经被下载了,但我明白你的意思,我可以在应用程序中将数据存储在列表中,然后从该信息访问有关文件的信息。 - Nikola Sivkov
如果您不假设文件是新鲜和空的,他仍然可以读取。那么对于现有文件呢? - nawfal
@nawfal 他们可以在启动时进行初始扫描,以捕获已经存在的文件。 - Paul Phillips
显示剩余7条评论

0
FileSystemWatcher1 = Your Main Watcher.
FileSystemWatcher2 = RecycleBin Watcher

If the FileSystemWatcher1 Deleted file == the FileSystemWatcher2 Created File
{
    //Do what you want with the FileSystemWatcher2.FullPath
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接