1

As I want to recurse the complete structure of any folder I am using Shell32, which can connect to lettered drives c:\;d:\ etc and connected devices that do not have letters such as an Android tablet.

My problem is that I cannot extract the Folder from FolderItem to recurse.

Thanks.

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();

2 Answers2

0

The problem solved by using:

currentItem.GetFolder as Folder
Yoh Deadfall
  • 2,711
  • 7
  • 28
  • 32
0

You have to do explicit casting on the currentfolder object like below

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();
Zain Ul Abidin
  • 2,467
  • 1
  • 17
  • 29