1

因为我想递归我使用 Shell32 的任何文件夹的完整结构,它可以连接到字母驱动器 c:\;d:\ 等以及连接的没有字母的设备,例如 Android 平板电脑。

我的问题是我无法从 FolderItem 中提取文件夹进行递归。

谢谢。

Using Shell32; // reference  browse to c:\Windows\System32\shell32.dll

class x
{
public int Hwnd { get; private set; }
public void ListAllFolderObjects()
{

 Shell32.Shell shell = new Shell32.Shell();
 Folder folder = shell.BrowseForFolder((int)Hwnd, "Choose Folder", 0, 0);
 if (folder != null)
    GetFolderObjects(folder);
}

private void GetFolderObjects(Folder folder)
{
 foreach (FolderItem currentItem in folder.Items())
 {
    // a
    string sType = currentItem.Type;
    string sName = currentItem.Name; 

    if (sType == "folder")
    {
      //  problem here - cannot get a folder from currentItem
      //  how do I cast FolderItem to Folder???????
      GetFolderObjects(currentItem); // recurse
 }
}
}

// from main
ListAllFolderObjects();
4

2 回答 2

0

通过使用解决的问题:

currentItem.GetFolder as Folder
于 2018-04-03T19:04:44.837 回答
0

您必须对 currentfolder 对象进行显式转换,如下所示

Using Shell32; // reference  browse to c:\Windows\System32\shell32.dll

class x
{
public int Hwnd { get; private set; }
public void ListAllFolderObjects()
{

 Shell32.Shell shell = new Shell32.Shell();
 Folder folder = shell.BrowseForFolder((int)Hwnd, "Choose Folder", 0, 0);
 if (folder != null)
    GetFolderObjects(folder);
}

private void GetFolderObjects(Folder folder)
{
 foreach (FolderItem currentItem in folder.Items())
 {
    // a
    string sType = currentItem.Type;
    string sName = currentItem.Name; 

    if (sType == "folder")
    {
        Folder f = (Folder)currentItem.GetFolder; //cast object
        GetFolderObjects(f); // recurse
 }
}
}

// from main
ListAllFolderObjects();
于 2018-04-04T19:05:37.113 回答