迭代文件系统并将结果写入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也需要标题。
您可以使用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中,以便它们按顺序排序。然后,当你完成时,你只需要一次一个地获得它们,而且它们已经处于有序状态。
+1只是提示。 – Dementic 2012-01-30 18:04:49
'fileList.OrderByDescending(f => f.fileName);' – Dementic 2012-01-30 17:58:32
你也可以'var csv = string.Join(“,”,fileList.OrderByDescending f => f.fileName));' – Dementic 2012-01-30 18:00:06
你在编写CSV文件时遇到了什么问题?你有什么试过的? – 2012-01-30 18:04:25