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

本文关键字:CSV 文件 结果 文件系统 迭代 | 更新日期: 2023-09-27 18:21:50

我正在编写一个迭代文件树的程序,现在我需要它将结果写入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还需要标题,如果你能让我也这样做的话。

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

只要你能把所有的数据都放在内存中,你最好把它们都保存起来,在内存中排序,而不是把它写到文件中。对文件中的数据进行排序的概念通常通过"将其读入内存,进行排序,然后再将其写回"来解决。

至于编写CSV文件,其实并没有那么难。我喜欢使用StringBuilder为每一行添加每个字段,然后一旦有了行,我就会将该行附加到文件中。对于标头,如果合适的话,您可以对其进行硬编码,如果是动态的,则可以从任何来源获取它们。你不知道如何写入文件吗?我的猜测是File.WriteAllText()和File.AppendText()方法将是您所需要的全部。

根据您的要求,一个一般的提示是,与其将项目添加到列表中,因为您最终会对它们进行全部排序,不如将它们添加到SortedList中,以便在进行排序时对它们进行排序。然后,当你完成时,你只需要一次一个,它们就已经井然有序了。

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