为什么 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 文件。在此之前,我是从实际文件编辑的,所以大小变大了,即使数据不存在,行也被计算在内。现在,它工作得很好。