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

时间:2011-12-26 00:34:37

标签: c# filesystemwatcher recycle-bin delete-file

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

我有这个代码在删除文件/文件夹时工作但我需要取消删除并将文件移动到回收站。我在这里找到了如何将文件/文件夹移动到回收站:How to Move files to the recycle bin

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); }

2 个答案:

答案 0 :(得分:3)

FileSystemWatcher无法帮助您完成任务。正确的方法是使用文件系统过滤器驱动程序,它将拦截文件删除请求并将文件移动到回收站。您可以创建自己的过滤器驱动程序(需要了解低级内核模式开发),或者我们提供CallbackFilter产品,它允许您以用户模式(甚至在.NET中)完成工作。

答案 1 :(得分:1)

FileSystemWatcher在实际删除,修改或创建文件后引发事件,因此在引发delete事件后进行复制会迟到。并且不可能使用FileSystemWatcher取消操作。可能它可以通过使用某种低级API来解决(但我不知道哪些以及如何)。