Как получить список файлов из корзины для смонтированного тома/диска?

Обычно люди получают список файлов в Корзине, используя 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 и хочу получить список файлов из корзины на смонтированном внешнем диске/томе. Как я могу это сделать?


person Brans Ds    schedule 11.05.2016    source источник
comment
Какая корзина? Потенциально их много.   -  person David Heffernan    schedule 11.05.2016
comment
Вы можете фильтровать по пути.   -  person Raymond Chen    schedule 12.05.2016


Ответы (1)


Как @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 будет содержать диск соединения/символической ссылки, который не обязательно является диском, на котором хранится удаленный элемент.

person Lance U. Matthews    schedule 27.08.2018