C# 使用CSVhelper接收多个.csv文件

C# 使用CSVhelper接收多个.csv文件,c#,C#,我从一个目录中获取所有.csv文件,使用CSVhelper从每个文件中获取几列,然后写入一个新的.csv文件。然而,当我试图接收文件时,它似乎只接收目录中的最后一个文件,我不明白为什么。我像这样接收文件: static void Main(string[] args) { string sourceDirectory = @"C:\Users\SourceDirectory"; var csvFiles = Directory.EnumerateFile

我从一个目录中获取所有.csv文件,使用CSVhelper从每个文件中获取几列,然后写入一个新的.csv文件。然而,当我试图接收文件时,它似乎只接收目录中的最后一个文件,我不明白为什么。我像这样接收文件:

static void Main(string[] args)
    {
        string sourceDirectory = @"C:\Users\SourceDirectory";

        var csvFiles = Directory.EnumerateFiles(sourceDirectory, "*.csv", SearchOption.AllDirectories);

        foreach (string currentFile in csvFiles)
        {
            readFile(currentFile);
        }
    }
然后在文件中执行如下更改:

public static void readFile(string currentFile)
    {
        using (var sr = new StreamReader(currentFile))
        {
            using (var sw = new StreamWriter(@"C:\Users\newFile.csv"))
            {
                var reader = new CsvReader(sr);
                var writer = new CsvWriter(sw);

                //CSVReader will now read the whole file into an enumerable
                IEnumerable dataRecord = reader.GetRecords<dataRecord>().ToList();

                foreach (dataRecord record in dataRecord)
                {
                    //Choose which data values you want to keep
                    writer.WriteField(record.info1);
                    writer.WriteField(record.info2);
                    writer.WriteField(record.info3);

                    //Moves the pointer onto the next record
                    writer.NextRecord();
                }
publicstaticvoidreadfile(stringcurrentfile)
{
使用(var sr=新的StreamReader(当前文件))
{
使用(var sw=newstreamwriter(@“C:\Users\newFile.csv”))
{
var读取器=新的CsvReader(sr);
var编写器=新的CSV编写器(sw);
//CSVReader现在将整个文件读入一个可枚举文件
IEnumerable dataRecord=reader.GetRecords().ToList();
foreach(dataRecord中的dataRecord记录)
{
//选择要保留的数据值
WriteField(record.info1);
WriteField(record.info2);
WriteField(record.info3);
//将指针移到下一条记录上
writer.NextRecord();
}

我不明白为什么它不接收所有文件,甚至更困惑的是为什么它只接收最后一个文件?

仅接收一个参数的StreamWriter构造函数的文档说

path参数可以是文件名,包括通用计算机上的文件 命名约定(UNC)共享。如果文件存在,它将被覆盖; 否则,将创建一个新文件

因此,在每个循环中,您都会用当前源文件的内容覆盖以前的C:\Users\newFile.csv,并以加载的最后一个csv文件的内容结尾

如果要附加到同一文件,则需要


是因为它正在遍历您的所有源文件,但您的代码每次都会覆盖您的输出文件,所以最后它只包含上一个文件的输出。太好了,谢谢!!希望您不介意我问一个问题。我正在阅读的.csv文件有7个头,但是我正在编写的文件我希望有11个头,其中一些是与我的类数据记录不同。CSVHelper可以这样做吗?它会抛出一个错误,告诉我标题不在类中,然后如果我将它添加到类中,它会说它不在它正在读取的文件中。这显然不会。抱歉,但我从未使用过CSVHelper库。也许你最好的机会是发布一个新的问题关于细节问题
using (var sw = new StreamWriter(@"C:\Users\newFile.csv", true))