迭代文件系统并将结果写入CSV文件

问题描述:

我正在编写迭代文件树的程序,现在我需要它将结果写入csv文件。要求将内容在写入csv文件之前按照字母数字顺序排序。所以我一直在保存文件到列表。迭代文件系统并将结果写入CSV文件

FileInfo fi = new FileInfo(file); 
fileList.Add(new Record { 
    fileName = fi.Name, 
    fileSize = fi.Length 
}); 

其中记录是一个类:

public class Record 
{ 
    public long fileSize { get; set; } 
    public string fileName { get; set; } 

} 

然后我做一个普通的旧排序()。现在我该如何将这个列表写入一个csv? 我欢迎任何更好的方法来完成整个过程。

有没有一种方法可以将结果写入csv,然后按照字母顺序排序csv?基本上,该程序必须对其进行排序而不是用户。

如果你能让我继续下去,csv也需要标题。

+0

'fileList.OrderByDescending(f => f.fileName);' – Dementic 2012-01-30 17:58:32

+0

你也可以'var csv = string.Join(“,”,fileList.OrderByDescending f => f.fileName));' – Dementic 2012-01-30 18:00:06

+0

你在编写CSV文件时遇到了什么问题?你有什么试过的? – 2012-01-30 18:04:25

您可以使用LINQ进行排序,使用StreamWriter进行文件创建。

using (var writer = new StreamWriter(@"C:\files.csv")) { 
    writer.WriteLine("Name,Size"); // Header 
    var query = fileList.OrderBy(r => r.fileName); 
    foreach (Record record in query) { 
     writer.WriteLine("\"{0}\",{1}", record.fileName, record.fileSize); 
    } 
} 

请注意,我用双引号(“)包围的文件名,在一个逗号(,)是文件名称的一部分的情况下,双引号本身是不适合的文件名的有效字符Windows,所以它不应该是一个问题。

只要你能适应内存中的所有数据,你最好不要把它写在内存中而是把它存储在内存中,而不是写入文件。在文件中对数据进行排序的概念通常通过“将其读入内存,对其进行分类并将其重新写回”来解决。

至于编写一个CSV文件,这并不是很难。我喜欢使用StringBuilder为每行添加每个字段,然后一旦我有一行,我将该行添加到文件中。对于标题,您可以在适当的情况下对它们进行硬编码,或者如果它是动态的,则可以从任何来源获取它们。你不知道如何写入文件?我的猜测是File.WriteAllText()和File.AppendText()方法将是你所需要的。

自从你问了一个简单的提示,就是将它们添加到列表中,而不是将它们添加到列表中,因为你最终将它们全部排序,就是将它们添加到SortedList中,以便它们按顺序排序。然后,当你完成时,你只需要一次一个地获得它们,而且它们已经处于有序状态。

+0

+1只是提示。 – Dementic 2012-01-30 18:04:49