Почему CSVReader читает только несколько файлов?

У меня есть 22 файла.csv, которые я хочу прочитать и записать в 1 файл.csv Это мой внутренний класс

 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);
                    }
                }
            }

Однако код записывает данные только из первых двух файлов.csv. Как мне решить эту проблему?

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. Этого также можно избежать, потому что длина уже int.

Другие вопросы по тегам