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);



            }
        }

谢谢

4

2 回答 2

1

你应该:

  • 使用DirectoryInfoandFileInfo代替Directoryand File(提供更多信息,而不仅仅是文件名)
  • 使用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
    }
}
于 2012-10-04T14:46:41.343 回答
0

我没有做任何事情来清理这里的输出并使用一个简单的字符串数组作为内容,但可以随意清理它。

考虑没有子文件夹:

    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));
       }

    }

然后,您必须将这些内容写到一个后缀为 CSV(逗号分隔值)的文件中,该文件可以由 Excel 打开。

于 2012-10-04T14:54:36.703 回答