2016-09-27 2 views
-2

Ich hatte vorher ein Problem und jetzt, da ich es gelöst habe, kann ich dieses Problem nicht lösen.Warum wird die if-Anweisung vor der foreach-Schleife ausgeführt?

Debug-Bild

Aus irgendeinem Grund die if-Anweisung vor der foreach-Schleife genannt wird und aus diesem Grund, die Variable, die ich nach der Schleife senden wollte, ist leer. Wie kann ich es reparieren? Ich dachte Code wird immer von oben nach unten gelesen?

Am Ende enthält die Liste alles, was es sollte aber die if-Anweisung nicht ein zweites Mal aufgerufen wird ist ...

 public static void GetAllFiles(string sDir) 
    { 
     List <string> datas = new List<string>(); 
     foreach (string dir in Directory.GetDirectories(sDir)) 
     { 
      try 
      { 
       foreach (string file in Directory.GetFiles(dir, "*text.txt")) 
       { 
        string var = File.ReadAllText(file); 
        datas.Add(var); 
       } 
       GetAllFiles(dir); 
      } 
      catch 
      { 
      } 
     } 
     if (datas != null) 
     { 
      string dets = String.Join("\n\n", datas.ToArray()); 
      sendmm(dets); 
     } 
    } 

AppData Verzeichnis

+0

Screenshots eines Texteditors sind ein sehr schlechter Ersatz für das Einfügen des eigentlichen Codes in den Frageneditor. –

+1

Fügen Sie den Code ein, damit wir ihn betrachten können und vielleicht können wir Ihnen helfen. – Ma3x

+0

bearbeitet, sorry dafür – Fightera100

Antwort

0

Der einfachste Weg, dies zu tun ist:

public static void GetAllFiles(string sDir) 
{ 
    Console.WriteLine(String.Join("\n\n",Directory.GetFiles(sDir, "*.*", SearchOption.AllDirectories))); 
} 

Es besteht keine Notwendigkeit für Rekursion ist - aber da Sie Rekursion in Ihrer Frage verwendet, Sie vereinfacht werden können, ist dies, wie Sie es, wenn Sie verwenden würde, brauche Rekursion für einen anderen Zweck.

List <string> datas = new List<string>(); 

public static void GetAllFiles(string sDir) 
{  datas = new List<string>(); 
     datas.AddRange(Directory.GetFiles(sDir); 
    foreach (string dir in Directory.GetDirectories(sDir)) 
    { 
     recursiveSearch();   
    } 
    if (datas != null) 
    { 
     string dets = String.Join("\n\n", datas.ToArray()); 
     sendmm(dets); 
    } 
} 
private string recursiveSearch(string dir) 
{ 
    datas.AddRange(Directory.GetFiles(dir)); 
    foreach(string directory in dir.GetDirectories()) 
    { 
     recursiveSearch(directory); 
    } 
} 
1

Ihre Methode übergeben wird GetAllFiles selbst ruft innerhalb der foreach Schleife und Sie setzen die Liste am Anfang der Methode zurück, so dass Sie eine leere datas Liste nach dem foreach Block sehen.

Ihre Position im Debugging-Bild befindet sich in einem zweiten (oder noch tieferen) GetAllFiles-Aufruf, bei dem der Directory.GetDirectories(sDir)-Aufruf keine Verzeichnisse mehr zurückgegeben hat. Sie befanden sich bereits in einem Unterverzeichnis, das keine Verzeichnisse mehr enthält.

Um besser zu verstehen, was passiert, öffnen Sie das Fenster Call Stack in Ihrer IDE und klicken Sie auf den Stack. Sie sollten mindestens zwei GetAllFiles Einträge im Stapel sehen. Klicken Sie darauf und überprüfen Sie Ihre datas Liste und andere lokale Variablen.

Verwandte Themen