我有一个使用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”类型的异常,但未在用户代码中处理
消息:
无法找到中央目录记录的结尾。
从第二次调用函数时发生异常。
可能是什么问题?
答案 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));