2016-05-19 3 views
-4

ЭТО ВОПРОС ОТВЕТ!C# рекурсивная функция

Мне нужно получить все файлы из Dropbox. Но я не могу закончить свою рекурсивную функцию, он не работает, у меня есть идея, почему он не работает, но я не знаю, как это исправить

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

    } 

Если его находками файл, он добавляет его в список (форма C#).

КАК ЭТО не работает:

Это будет список всех файлов в первом каталоге, тогда он будет идти в первую папку найти, назовём эту папку «fol1». После того, как он сканирует все «fol1», он добавляет найденные файлы в список, что хорошо. Но тогда, когда он должен вернуться и искать больше файлов в других каталогах, «fol2», «fol3». Рекурсия просто существует и не делает этого. Так вот моя проблема.

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

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

Thanks.

РАБОТА КОД:

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