首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查回收站是否为空

如何检查回收站是否为空
EN

Stack Overflow用户
提问于 2014-01-04 21:33:37
回答 2查看 1.6K关注 0票数 4

如果可能的话,我希望能够检查回收站是否是空的,尽量少麻烦(导入dll,导入任何东西,创建整个新类来保存回收站功能等等)。

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

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-04 21:52:27

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

代码语言:javascript
复制
Shell shell = new Shell();
Folder recycleBin = shell.NameSpace(10);
int itemsCount = recycleBin.Items().Count;

取自这里

票数 4
EN

Stack Overflow用户

发布于 2014-01-04 21:46:33

这是糟糕的文档,但是您可能希望SHQueryRecycleBin编辑:在MSDN上稍微好一点的文档。

代码语言:javascript
复制
[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,那么回收站是空的。

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20927023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档