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