Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 迭代文件系统并将结果写入CSV文件_C#_Csv_Iteration_Loops_Export To Csv - Fatal编程技术网

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

C# 迭代文件系统并将结果写入CSV文件,c#,csv,iteration,loops,export-to-csv,C#,Csv,Iteration,Loops,Export To Csv,我正在编写一个程序,迭代文件树,现在我需要它将结果写入csv文件。在写入csv文件之前,要求对内容进行字母数字排序。所以我一直在把文件保存到一个列表中 FileInfo fi = new FileInfo(file); fileList.Add( new Record { fileName = fi.Name, fileSize = fi.Length }); 如果记录是一个类: public class Record { public long fileSize {

我正在编写一个程序,迭代文件树,现在我需要它将结果写入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文件,其实并不难。我喜欢使用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中文件名的有效字符,因此应该不会有问题。

fileList.OrderByDescending(f=>f.fileName);
您也可以执行
var csv=string.Join(“,,fileList.OrderByDescending(f=>f.fileName))您在编写CSV时遇到了什么问题?你试过什么?@JohnSaunders我以前从来没有试过。我看了一些例子,他们似乎在csv上写了一个通用列表,我正在努力写我的列表,而不是编写到示例中的通用列表。向我们展示您尝试过的内容和不起作用的内容。我们会帮你的。否则,这相当于我们为你做你的工作。