2016-05-19 14 views
-4

この質問に答えます!C#再帰関数

私はdropboxからすべてのファイルを取得する必要があります。しかし、私は私の再帰関数を終了カント、それは仕事をdoesntの、私はそれが仕事をdoesntのなぜ考えを持っている、しかし、私はその発見のファイルは、それがリスト(C#のフォームに追加した場合は、それを

private void getAllFiles(string path) 
    { 
     var dropCon = DatabaseDropbox.Instance(); 
     if (dropCon.IsConnect()) 
     { 
      ICloudDirectoryEntry folder = dropCon.DropboxStorage.GetFolder(path); 
      foreach (ICloudFileSystemEntry fsentry in folder) 
      { 
       if (fsentry is ICloudDirectoryEntry) // IF FOLDER 
       { 

       } 
       else // IF FILE 
       { 
        Console.WriteLine(path + " " + fsentry.Name); 
        ListViewItem lvi = new ListViewItem(fsentry.Name); 
        lvi.SubItems.Add(path); 
        listViewFolders.Items.Add(lvi); 
       } 
      } 
      foreach (ICloudFileSystemEntry fsentry in folder) 
      { 
       if (fsentry is ICloudDirectoryEntry) // IF FOLDER 
       { 
        var mpath = path + "/" + fsentry.Name; 
        getAllFiles(mpath); 
       } 
       else // IF FILE 
       { 
        Console.WriteLine(path + " " + fsentry.Name); 
        ListViewItem lvi = new ListViewItem(fsentry.Name); 
        lvi.SubItems.Add(path); 
        listViewFolders.Items.Add(lvi); 
       }   
      } 
     }   

    } 

を修正する方法を知りません)。どのようにそれdoes notのWORK

:それは最初のディレクトリ内のすべてのファイルを一覧表示します

、 それが最初に見つかったフォルダに移動し、そのフォルダ「fol1」を呼び出すことができます。 すべての "fol1"をスキャンすると、見つかったファイルがリストに追加されます。 しかし、それが戻って、他のディレクトリ、 "fol2"、 "fol3"でさらに多くのファイルを検索する必要があります。再帰はちょうどそれ自体存在し、それはそれをしません。だから私の問題です。

FOUND RESULTS: 
https://gyazo.com/fda8fde13dfbf32f35d39b87712b5751 

ACTUAL FOLDERS: 
https://gyazo.com/619e5c46bbc113d7d23a56b225f4f209 
https://gyazo.com/265034521f317bf0d308910929d1664c 
https://gyazo.com/ed9fe5375e1b21f54bbd1f127085c255 

ありがとうございます。

WORKING CODE:

private void getAllFiles(string path) 
    { 
     var dropCon = DatabaseDropbox.Instance(); 
     if (dropCon.IsConnect()) 
     { 
      ICloudDirectoryEntry folder = dropCon.DropboxStorage.GetFolder(path); 

      foreach (ICloudFileSystemEntry fsentry in folder) 
      { 
       if (fsentry is ICloudDirectoryEntry) // IF FOLDER 
       { 
        var mpath = path + "/" + fsentry.Name; 
        getAllFiles(mpath); 
       } 
       else // IF FILE 
       { 
        Console.WriteLine(path + " " + fsentry.Name); 
        ListViewItem lvi = new ListViewItem(fsentry.Name); 
        lvi.SubItems.Add(path); 
        listViewFolders.Items.Add(lvi); 
       }   
      } 
     }     
    } 
+2

それが動作しない理由のあなたの考えは何ですか? –

+2

なぜ機能しないのですか?なぜそれはいつも真実に戻るのですか? –

+2

「動作しない」とはどういう意味かわかりません。あなたが直面している予期しない動作をより良く説明してください。 – AntiTcb

答えて

0
private void getAllFiles(string path) 
     { 
      var dropCon = DatabaseDropbox.Instance(); 
      if (dropCon.IsConnect()) 
      { 
       ICloudDirectoryEntry folder = dropCon.DropboxStorage.GetFolder(path); 

       foreach (ICloudFileSystemEntry fsentry in folder) 
       { 
        if (fsentry is ICloudDirectoryEntry) // IF FOLDER 
        { 
         var mpath = path + "/" + fsentry.Name; 
         getAllFiles(mpath); 
        } 
        else // IF FILE 
        { 
         Console.WriteLine(path + " " + fsentry.Name); 
         ListViewItem lvi = new ListViewItem(fsentry.Name); 
         lvi.SubItems.Add(path); 
         listViewFolders.Items.Add(lvi); 
        }   
       } 
      }     
     }