为什么 CSVReader 只读取几个文件?
Why CSVReader only read few files?
我有 22 个 .csv 文件要读取并写入 1 个 .csv 文件
这是我的内部 class
internal class Record
{
[Name("RptDt")]
public string Date { get; set; }
[Name("Entity")]
public string Entity { get; set; }
[Name("ProdFamily")]
public string ProdFamily { get; set; }
[Name("ProdGroup")]
public string ProdGroup { get; set; }
[Name("ProdType1")]
public string ProdType1 { get; set; }
[Name("ProdTypo")]
public string ProdTypo { get; set; }
[Name("ProdType")]
public string Buy { get; set; }
[Name("Principal")]
public string Principal { get; set; }
}
这是读写代码
string[] files = Directory.GetFiles(fbd.SelectedPath, "*.csv", SearchOption.AllDirectories);
string numberFile = files.Length.ToString();
using (var writer = new StreamWriter(SaveTxt.Text + "\Result_" + MonthCB.Text + "_" + YearCB.Text + ".csv"))
using (var csvOut = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
for (int i = 0; i < Int16.Parse(numberFile); i++)
{
using (var reader = new StreamReader(files[i]))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
var records = csv.GetRecords<Record>();
csvOut.WriteRecords(records);
}
}
}
但是,代码只写入前 2 个 .csv 文件中的数据。我该如何解决这个问题?
您的代码中存在很多问题,我已尝试修复其中的许多问题。如果仍然无法正常工作,请告诉我。
string[] files = Directory.GetFiles(fbd.SelectedPath, "*.csv", SearchOption.AllDirectories);
using (StreamWriter writer = new StreamWriter(SaveTxt.Text + "\Result_" + MonthCB.Text + "_" + YearCB.Text + ".csv"))
{
foreach (string file in files)
{
using (var reader = new StreamReader(@"C:\test.csv"))
{
while (!reader.EndOfStream)
{
writer.WriteLine(reader.ReadLine());
}
}
}
}
可以避免使用 CsvReader。您正在执行 length.ToString() 并再次转换为 int16。这也是可以避免的,因为length已经是int了。
我找到了答案。我为每个输入创建一个新的 .csv 文件。在此之前,我是从实际文件编辑的,所以大小变大了,即使数据不存在,行也被计算在内。现在,它工作得很好。
我有 22 个 .csv 文件要读取并写入 1 个 .csv 文件 这是我的内部 class
internal class Record
{
[Name("RptDt")]
public string Date { get; set; }
[Name("Entity")]
public string Entity { get; set; }
[Name("ProdFamily")]
public string ProdFamily { get; set; }
[Name("ProdGroup")]
public string ProdGroup { get; set; }
[Name("ProdType1")]
public string ProdType1 { get; set; }
[Name("ProdTypo")]
public string ProdTypo { get; set; }
[Name("ProdType")]
public string Buy { get; set; }
[Name("Principal")]
public string Principal { get; set; }
}
这是读写代码
string[] files = Directory.GetFiles(fbd.SelectedPath, "*.csv", SearchOption.AllDirectories);
string numberFile = files.Length.ToString();
using (var writer = new StreamWriter(SaveTxt.Text + "\Result_" + MonthCB.Text + "_" + YearCB.Text + ".csv"))
using (var csvOut = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
for (int i = 0; i < Int16.Parse(numberFile); i++)
{
using (var reader = new StreamReader(files[i]))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
var records = csv.GetRecords<Record>();
csvOut.WriteRecords(records);
}
}
}
但是,代码只写入前 2 个 .csv 文件中的数据。我该如何解决这个问题?
您的代码中存在很多问题,我已尝试修复其中的许多问题。如果仍然无法正常工作,请告诉我。
string[] files = Directory.GetFiles(fbd.SelectedPath, "*.csv", SearchOption.AllDirectories);
using (StreamWriter writer = new StreamWriter(SaveTxt.Text + "\Result_" + MonthCB.Text + "_" + YearCB.Text + ".csv"))
{
foreach (string file in files)
{
using (var reader = new StreamReader(@"C:\test.csv"))
{
while (!reader.EndOfStream)
{
writer.WriteLine(reader.ReadLine());
}
}
}
}
可以避免使用 CsvReader。您正在执行 length.ToString() 并再次转换为 int16。这也是可以避免的,因为length已经是int了。
我找到了答案。我为每个输入创建一个新的 .csv 文件。在此之前,我是从实际文件编辑的,所以大小变大了,即使数据不存在,行也被计算在内。现在,它工作得很好。