我需要创建一个小型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 :(得分:1)
你应该:
DirectoryInfo
和FileInfo
代替Directory
和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
}
}
答案 1 :(得分: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打开。