2017-06-08 13 views
0

親ディレクトリの結果を返さないファイルカウント関数があります。すべてのサブディレクトリの結果を返します。私のデバッグ中に私は、私のDirectory.GetDirectories(sDir)として渡されている親ディレクトリを参照してくださいが、一度Directory.GetFiles(d)をヒットすると、すでにサブディレクトリに変更されています。私はこの壁の壁に頭を向けて叩いています。明らかに、それは私のforeachループでなければならないが、私はそれを見ていない。C# - ディレクトリ検索で親ディレクトリの結果が返されない

私が渡していたファイル構造は次のとおりです。

C:\ Users \ユーザーXXXXX \デスクトップ\ Tempにログ

が、それは三つのサブディレクトリがあります。

C:\ユーザー\ XXXXX \デスクトップ\一時ログ\ SUB1

C:\ Users \ユーザーXXXXX \デスクトップ\ Tempにログ\ SUB2

C:\ Users \ユーザーXXXXX \デスクトップ\ Tempにログ\ SUB3

誰か私のエラーが表示されますか?

 private static string fileCount(string sDir, string sfileType) 
    { 
     int count = 0; 
     string extension; 
     foreach (string d in Directory.GetDirectories(sDir)) 
     { 
      foreach (string file in Directory.GetFiles(d)) 
      { 
       extension = Path.GetExtension(file); 
       if (extension.ToUpper().Equals(sfileType.ToUpper())) 
       { 
        TimeSpan fileAge = DateTime.Now - File.GetLastWriteTime(file); 
        if (fileAge.Days > int.Parse(ConfigurationManager.AppSettings["numberOfDays"])) 
        { 
         count++; 
        } 
       } 
      } 
     } 
     return count.ToString(); 
    } 
+2

Directory.GetDirectoriesは引数のサブディレクトリのみを返しますか? – Casey

+0

どの出力番号が期待されていますか、実際に何を得ていますか? –

+2

@Caseyが指摘しているように、Directory.GetDirectoriesは親ディレクトリを返しません。https://msdn.microsoft.com/pt-br/library/c1sez4sc(v=vs.110).aspx追加のDirectory.GetFilesをforeachの外の親ディレクトリ – Magnetron

答えて

1

あなたはforeachの中で使う配列のみのサブディレクトリが含まれてい

foreach (string file in Directory.GetFiles(parent_path)) 
     { 
      extension = Path.GetExtension(file); 
      if (extension.ToUpper().Equals(sfileType.ToUpper())) 
      { 
       TimeSpan fileAge = DateTime.Now - File.GetLastWriteTime(file); 
       if (fileAge.Days > int.Parse(ConfigurationManager.AppSettings["numberOfDays"])) 
       { 
        count++; 
       } 
      } 
     } 
+0

ありがとうございます。それはとても簡単でした。私は私のディレクトリループがやっていたことを誤解していたと思います。 – user1874184

0

電流ループの親ディレクトリのためではなく、あなたの外に別のループを必要としています。あなたの親とあなたの良いを追加してください!

private static string fileCount(string sDir, string sfileType) 
{ 
    int count = 0; 
    string extension; 
    List<string> directoriesToCheck = Directory.GetDirectories(sDir).ToList(); 
    directoriesToCheck.Add(sDir); 
    foreach (string d in directoriesToCheck) 
    { 
     foreach (string file in Directory.GetFiles(d)) 
     { 
      extension = System.IO.Path.GetExtension(file); 
      if (extension.ToUpper().Equals(sfileType.ToUpper())) 
      { 
       TimeSpan fileAge = DateTime.Now - File.GetLastWriteTime(file); 
       if (fileAge.Days > int.Parse(ConfigurationManager.AppSettings["numberOfDays"])) 
       { 
        count++; 
       } 
      } 
     } 
    } 
    return count.ToString(); 
} 
関連する問題