Почему 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.