使用ExcelDataReader时无效的数据异常

时间:2018-01-25 13:09:23

标签: c# exceldatareader

我有一个使用ExcelDataReader.dll读取Excel文件的程序 在将文件读取移动到新任务之前,一切都很完美:

Stream output = new MemoryStream();
httpRequest.Files[0].InputStream.CopyToAsync(output);
ImportDataWriter importDatawRiter = new ImportDataWriter(authenticationInfo);
Task.Run(() => importDatawRiter.ImportFile(output));  

ImportLine代码:

public ImportResult ImportFile(Stream fs)
{
        IExcelDataReader reader = ExcelReaderFactory.CreateOpenXmlReader(fs);
}

现在这一行:

IExcelDataReader reader = ExcelReaderFactory.CreateOpenXmlReader(fs);

导致异常:

System.IO.Compression.dll中出现“System.IO.InvalidDataException”类型的异常,但未在用户代码中处理

消息:

无法找到中央目录记录的结尾。

从第二次调用函数时发生异常。

可能是什么问题?

exception screenshot

1 个答案:

答案 0 :(得分:2)

问题是你没有等待复制任务完成,所以当你开始阅读MemoryStream时,它没有满(它甚至可能是完全空的),所以,将你的代码更改为:

Stream output = new MemoryStream();
await httpRequest.Files[0].InputStream.CopyToAsync(output);
^^^^^
ImportDataWriter importDatawRiter = new ImportDataWriter(authenticationInfo);
Task.Run(() => importDatawRiter.ImportFile(output));  

而且,除非ImportFile是一种即发即弃的动作,否则我建议您使用

await Task.Run(() => importDatawRiter.ImportFile(output));