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

时间:2012-01-30 17:55:20

标签: c# csv iteration loops export-to-csv

我正在编写一个迭代文件树的程序,现在我需要它将结果写入csv文件。在写入csv文件之前,需要按字母数字顺序对内容进行排序。所以我一直把文件保存到List。

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

}

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

有没有办法可以在我去的时候将结果写入csv然后按字母顺序对csv进行排序?基本上程序必须对它进行排序而不是用户。

csv也需要标题,如果你能让我继续这样做。

2 个答案:

答案 0 :(得分:1)

只要你能够将所有数据都放在内存中,你最好抓住它并将其分类到内存而不是将其写入文件。在文件中对数据进行排序的概念通常通过“将其读入内存,对其进行排序,然后再将其写回”来解决。

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

只是一个一般的提示,因为你问,是,而不是将项目添加到列表,因为你最终将它们全部排序,是将它们添加到SortedList,以便它们按照你的方式排序。然后,当你完成后,你只需要一次获得它们,它们已经处于有序状态。

答案 1 :(得分:0)

您可以使用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中文件名的有效字符,因此这应该不是问题。

相关问题