我似乎已经没有关于这个问题的想法了。我把它剪切到尽可能简单,但我每次都得到“没有找到头记录”错误。
我的CSV文件
SIC,Description,Grouping
1,text,group
我的模特
public class SicCodeModel
{
public string SIC { get; set; }
public string Description { get; set; }
public string Grouping { get; set; }
}
我的地图类
public sealed class SicCodeMap : CsvClassMap<SicCodeModel>
{
public SicCodeMap()
{
Map(m => m.SIC);
Map(m => m.Description);
Map(m => m.Grouping);
}
}
控制器代码
byte[] uploadedFile = new byte[model.File.InputStream.Length];
model.File.InputStream.Read(uploadedFile, 0, uploadedFile.Length);
using (var reader = new StreamReader(model.File.InputStream))
using (var csvReader = new CsvReader(reader))
{
csvReader.Configuration.RegisterClassMap<SicCodeMap>();
var items = csvReader.GetRecords<SicCodeModel>().ToList();
}
我上传文件的MVC模型
public class ImportModel
{
[Required]
public HttpPostedFileBase File { get; set; }
}
当我上传文件时,它就在那里。但是当GetRecords运行时,我得到了错误。
感谢您的帮助。这似乎应该是超级简单的,但我必须遗漏一些东西。
答案 0 :(得分:3)
发生错误是因为您在model.File.InputStream
之前阅读了CsvReader
,并且未在InputStream
中返回位置光标以准备CsvReader
。
行后:model.File.InputStream.Read(uploadedFile, 0, uploadedFile.Length);
只需致电model.File.InputStream.Seek(0, SeekOrigin.Begin);
,您就不会再看到该错误了。
答案 1 :(得分:1)
我得到了这段代码。唯一的变化是控制器代码。我从上传的文件到StreamReader到CsvReader都是正确的。到目前为止运作良好。
StreamReader reader = new StreamReader(model.File.InputStream);
using (CsvReader csvReader = new CsvReader(reader))
{
var stuff = csvReader.GetRecords<SicCodeModel>();
}