如何从网络共享删除中回收文件/文件夹



我正在尝试编写一个程序,该程序将监视目录/磁盘,并在从网络共享文件夹中删除已删除的文件/文件夹时将其移动到回收站。

我有这个代码,这是工作时,一个文件/文件夹被删除,但我需要取消删除和移动文件回收站。我发现如何移动文件/文件夹回收站在这里:如何移动文件到回收站

FileSystemWatcher fsw = new FileSystemWatcher();
private void frmMain_Load(object sender, EventArgs e)
{
    StartWatcher("X:\Virtuals\");
}
private void StopWatcher()
{
    if (fsw != null)
        try
        {
            fsw.EnableRaisingEvents = false;
            fsw.Dispose();
            fsw = null;
        }
        catch { }
}
private void StartWatcher(string path)
{
    StopWatcher();
    FileSystemWatcher fsw = new FileSystemWatcher();
    fsw.Path = Path.GetDirectoryName(path);
    fsw.Filter = Path.GetFileName(path);
    fsw.NotifyFilter = NotifyFilters.LastAccess |
    NotifyFilters.LastWrite | NotifyFilters.FileName
    | NotifyFilters.DirectoryName;
    fsw.Deleted += new FileSystemEventHandler(OnDeleted);
    fsw.EnableRaisingEvents = true;
}
private void OnDeleted(object source, FileSystemEventArgs e)
{ MessageBox.Show("File deleted: " + e.FullPath); }

FileSystemWatcher不会帮助您完成任务。正确的方法是使用文件系统过滤器驱动程序,它将拦截文件删除请求并将文件移动到回收站。你可以创建自己的过滤器驱动程序(需要底层内核模式开发的知识),或者我们提供的CallbackFilter产品,它可以让你在用户模式下完成工作(甚至在。net中)。

FileSystemWatcher在文件被实际删除、修改或创建之后引发事件,因此在引发删除事件之后进行复制就太晚了。并且不可能取消使用FileSystemWatcher的操作。也许它可以通过使用某种低级api来解决(但我不知道是哪一种以及如何解决)。

相关内容

  • 没有找到相关文章

最新更新