2012-10-04 58 views
0

我需要創建一個小型的C#控制檯應用程序來運行我的本地計算機上的目錄的報告。該報告將是一個Excel文檔,包含3列,包括:列中每個文件夾的名稱,如果該文件夾包含任何數據,如果該文件夾上次更新時包含數據。我目前的想法是一個小型的C#控制檯應用程序,該應用程序讀取目錄經過每個文件夾並執行這些測試,一次創建一行。我對C#相當陌生,不知道如何實現這一點。我曾嘗試下面的代碼:報告目錄統計信息

static void Main(string[] args) 
     { 
      string[] filePaths = Directory.GetFiles(@"C:/TestFolder/"); 

      foreach (string value in filePaths) 
      { 
       Console.WriteLine(value); 



      } 
     } 

感謝

+0

您是否需要遞歸檢查子文件夾? – deepee1

+0

沒有子文件夾。我只需要記錄頂層文件夾的名稱,並檢查它們是否爲空或包含數據 – Bradley

回答

1

您應該:

  • 使用DirectoryInfoFileInfo代替DirectoryFile(不僅僅是一個文件名提供更多信息)
  • 使用EnumerateFiles而不是GetFiles(枚舉文件而不是一次全部檢索)
  • 做它遞歸地爲每個檢索FileInfo包含Directory屬性在其Attributes財產

所以沿東西線(直接從頭部代碼,而不是編譯和未經測試):

// in your caller method 
ProcessFolder(@"C:/TestFolder/"); 


void ProcessFolder(string path) 
{ 
    foreach (var file in DirectoryInfo.EnumerateFiles(path)) 
    { 
     if(file.Attributes & FileAttributes.Directory == FileAttributes.Directory) 
      ProcessFolder(file.FullName); // recursively handle a directory 
     else 
      Console.Out.Writeline(file.FullName); // handle a file 
    } 
} 
0

我m什麼都不做,在這裏清理輸出,並使用一個簡單的字符串數組作爲內容,但隨意清理它,只要你喜歡。

考慮無子文件夾:

static void Main(string[] args) 
    { 
     DirectoryInfo di = new DirectoryInfo("c:\\offTopic"); 
     var data = di.EnumerateDirectories() 
      .Select(a => 
       new string[] 
       { a.Name, 
        "" + (a.EnumerateFiles().Count() > 0), 
        "" + a.EnumerateFileSystemInfos().Max(b => b.LastWriteTime) 
       }); 

     foreach (var x in data) 
     { 
      Console.WriteLine(string.Join(",", x)); 
     } 

    } 

然後,你將不得不寫這些內容的文件,可以用Excel打開CSV(逗號分隔值)的後綴。

+0

這是返回System.InvalidOperationException未處理消息=序列不包含任何元素異常。任何想法爲什麼? – Bradley

+0

@Bradley也許你的文件夾中沒有目錄?只要目錄存在,我一直在爲我工作。 – deepee1