【问题标题】:CsvHelper does not read data from .csv-File created by CsvHelperCsvHelper 不会从 CsvHelper 创建的 .csv 文件中读取数据
【发布时间】:2018-07-08 13:04:57
【问题描述】:

您好,我正在尝试使用 CsvHelper 并最终将我的数据写入 .csv 文件,但如果尝试读取数据,结果始终为空。它读取标题,然后 csv.Read() 似乎跳过了所有数据。

Sperrnummer 类定义:

public class Sperrnummer
{
    public string Nummer { get; set; }
    public DateTime Erstellt { get; set; }
    public string Benutzer { get; set; }

    public Sperrnummer(string nummer, DateTime erstellt, string benutzer)
    {
        Nummer = nummer;
        Erstellt = erstellt;
        Benutzer = benutzer;
    }

    public Sperrnummer(string nummer)
    {
        Nummer = nummer;
        Erstellt = DateTime.Now;
        Benutzer = HttpContext.Current.User.Identity.Name;
    }
    public Sperrnummer()
    {
        Nummer = "";
        Erstellt = DateTime.Now;
        Benutzer = HttpContext.Current.User.Identity.Name;
    }
}

这是我的示例文件:

Nummer,Erstellt,Benutzer
03063651976,08.07.2018 13:54:49,MASCHINE\Plopp
03063651977,08.07.2018 13:54:49,MASCHINE\Plopp
03063651978,08.07.2018 13:54:49,MASCHINE\Plopp
03063651979,08.07.2018 13:54:49,MASCHINE\Plopp
03063651971,08.07.2018 13:54:49,MASCHINE\Plopp
03063651972,08.07.2018 13:54:49,MASCHINE\Plopp
03063651973,08.07.2018 13:54:49,MASCHINE\Plopp

这是我的“读者”:

public ActionResult Index()
{
    var filePath = Server.MapPath("~/liste.txt");
    List<Sperrnummer> sperrnummern = new List<Sperrnummer>();

    if (System.IO.File.Exists(filePath)){
        using (var reader = new StringReader(filePath))
        {
            var csv = new CsvReader(reader);

            csv.Read();
            csv.ReadHeader();
            while (csv.Read())
            {
                var nummer = csv.GetRecord<Sperrnummer>();
                sperrnummern.Add(nummer);
            }
        }
    }
    else
    {
        sperrnummern = new List<Sperrnummer>();
    }

    return View(sperrnummern);
}

生成的“sperrnummern”始终为空。

【问题讨论】:

  • 您是否尝试调试此代码? if 语句有效吗?
  • 我认为第一次阅读是没有必要的。你失去了那里的标题。
  • 是的,调试表明,if 语句工作得很好。文档中建议标头前的 .read() 。
  • 有异常处理吗?例如,如果 CSV 行无法解析为您未显示的 Sperrnummer 类怎么办?
  • CSVHelper 可以一次将所有条记录读入您的收藏。大部分代码都不需要。

标签: c# csv csvhelper


【解决方案1】:

鉴于缺少默认构造函数和目标类的只读属性,您必须手动初始化该类,提取值并将它们传递给构造函数参数。

while (csv.Read()) {
    var nummer = new Sperrnummer(
        nummer: csv["Nummer"],
        erstellt: csv.GetField<DateTime>("Erstellt"),
        benutzer: csv["Benutzer"]
    );
    sperrnummern.Add(nummer);
}

【讨论】:

  • 根据您的评论,我添加了一个默认构造函数,似乎解决了问题!因此,我将您的答案标记为解决方案。谢谢大家!
猜你喜欢
  • 2022-10-12
  • 1970-01-01
  • 2021-10-02
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多