FileSystemWatcher 如何检测多个卷中的删除?

问题描述 投票:0回答:1

我写了一个程序,可以打开或清空回收站并位于托盘中。我使用 SHEmptyRecycleBin 执行清理,并使用 FileSystemWatcher 检测回收站文件夹中的更改。问题是当我删除非C盘的文件时,FileSystemWatcher没有反应。我将非常感谢您的帮助!

部分代码:

enum RecycleFlags : uint
{
    SHRB_NOCONFIRMATION = 0x00000001,
    SHRB_NOPROGRESSUI = 0x00000002,
    SHRB_NOSOUND = 0x00000004
}

[DllImport("Shell32.dll", CharSet = CharSet.Unicode)]
static extern uint SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath, RecycleFlags dwFlags);

static Shell shell = new Shell();
Folder recycleBin = shell.NameSpace(10);

public Form1()
{
    InitializeComponent();

    FileSystemWatcher watcher = new FileSystemWatcher(@"C:\\$Recycle.Bin");

    watcher.Changed += OnChanged;
    watcher.EnableRaisingEvents = true;
}

private void OnChanged(object sender, FileSystemEventArgs e)
{
    if (recycleBin.Items().Count == 0)
    {
        NotifyIcon.Icon = Properties.Resources.Empty;
    }
    else
    {
        NotifyIcon.Icon = Properties.Resources.Full;
    }
}

private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
    System.Diagnostics.Process.Start("explorer.exe", "shell:RecycleBinFolder");
}

private void emptyToolStripMenuItem_Click(object sender, EventArgs e)
{
    SHEmptyRecycleBin(IntPtr.Zero, null, RecycleFlags.SHRB_NOSOUND);
}
c# .net filesystemwatcher recycle-bin
1个回答
0
投票

问题是你只监控C盘。正如您所确定的,C 盘上有 $Recycle.Bin 文件夹。根据文件系统的不同,它也存在于其他驱动器上。您必须监视此文件夹。从技术角度来看,如果先把数据(特别是大文件或者很多小文件)移到C中会非常耗时。对于硬盘(patetion)内的移动,您必须更改 patetion 表。

© www.soinside.com 2019 - 2024. All rights reserved.