Hi I am trying to use CsvHelper and did finally get it to write my data into a .csv-file but if try to read the data the result is always empty. It reads the header and then csv.Read() seems to skip all the data.
The Sperrnummer class definition:
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;
}
}
Here's my sample file:
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
And here's my "Reader":
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);
}
The resulting "sperrnummern" is always empty.
Given the lack of a default constructor and the readonly properties of the target class, you would have to initialize the class manually, extracting the values and passing them to the constructor arguments.
while (csv.Read()) {
var nummer = new Sperrnummer(
nummer: csv["Nummer"],
erstellt: csv.GetField<DateTime>("Erstellt"),
benutzer: csv["Benutzer"]
);
sperrnummern.Add(nummer);
}