2012-10-04 57 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