繁体   English   中英

如何检查回收站是否为空

[英]How to check if the recycle bin is empty

如果可能的话,我希望能够检查回收站是否为空,只需要轻微的麻烦(导入dll,导入任何内容,创建整个新类来保存回收站功能等等)

我已经在网上找到了以下代码来清空回收站,所以我很自然地怀疑我应该能够扩展它以检查它是否需要先清空,也许是Shell32.dll中的另一个函数。

enum BinFlags : uint
{
    SHERB_NOCONFIRMATION = 0x00000001,
    SHERB_NOPROGRESSUI = 0x00000002,
    SHERB_NOSOUND = 0x00000004
}


[DllImport("Shell32.dll", CharSet = CharSet.Unicode)]
static extern uint SHEmptyRecycleBin(IntPtr hwnd, string rootPath,
                                         BinFlags flags);

/* snip, bunch of code... */

SHEmptyRecycleBin(IntPtr.Zero, null, 0);

您可以添加对C:\\Windows\\System32\\Shell32.dll引用,并使用以下代码段:

Shell shell = new Shell();
Folder recycleBin = shell.NameSpace(10);
int itemsCount = recycleBin.Items().Count;

取自这里

这是糟糕的文档,但您可能需要SHQueryRecycleBin编辑:在MSDN上略微更好的文档。

[DllImport("shell32.dll")]
static extern int SHQueryRecycleBin(string pszRootPath, ref SHQUERYRBINFO
   pSHQueryRBInfo);

[StructLayout(LayoutKind.Sequential, Pack=4)]
public struct SHQUERYRBINFO
{
    public int  cbSize;
    public long i64Size;
    public long i64NumItems;
}

它看起来像你打电话,它填充对象,如果你看i64NumItems它是0然后回收站是空的。

public static int GetCount()
{
    SHQUERYRBINFO sqrbi = new SHQUERYRBINFO();
    sqrbi.cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO));
    int hresult = SHQueryRecycleBin(string.Empty, ref sqrbi);
    return (int)sqrbi.i64NumItems;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM