如何获取已挂载卷/磁盘回收站中文件列表?

3
通常人们使用Shell32.dll获取回收站中文件列表。
private static IEnumerable<string> GetRecycleBinFilenames()
{
    const int ssfBitbucket = 10;
    Type t = Type.GetTypeFromProgID("Shell.Application");
    dynamic shell = Activator.CreateInstance(t);
    Folder recycleBin = shell.NameSpace(ssfBitbucket);

    foreach (FolderItem2 recfile in recycleBin.Items())
    {
        yield return recfile.Path;
    }

    Marshal.FinalReleaseComObject(shell);
}

我正在挂载一个VHDX文件,并希望从已挂载的外部磁盘/卷中获取回收站中的文件列表。我该如何操作?


哪个回收站?可能有很多。 - David Heffernan
你可以根据路径进行筛选。 - Raymond Chen
1个回答

0

正如@RaymondChen建议的那样,您可以根据Path属性进行过滤,该属性包含已删除项的当前路径...

foreach (FolderItem2 recfile in recycleBin.Items())
{
    if (Path.GetPathRoot(recfile.Path) == "X:\\")
        yield return recfile.Path;
}

你也可以获取已删除项目所在目录的路径,并以相同的方式进行过滤...

const int BitBucketItem_OriginalParentPath = 1;

foreach (FolderItem2 recfile in recycleBin.Items())
{
    string originalParentPath = recycleBin.GetDetailsOf(recfile, BitBucketItem_OriginalParentPath);

    if (Path.GetPathRoot(originalParentPath) == "X:\\")
        yield return recfile.Path;
}

...但是如果该项是通过连接点/符号链接删除的,则originalParentPath将包含连接点/符号链接的驱动器,而不一定是存储已删除项的驱动器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接