我有一个使用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.InvalidDataException‘的异常发生在System.IO.Compression.dll中,但未在用户代码中处理
消息:
无法找到中央目录记录的端。
异常发生在我第二次调用该函数时。
有什么问题吗?

发布于 2018-01-25 13:30:10
问题是,您没有等待复制任务完成,所以当您读取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)); https://stackoverflow.com/questions/48443648
复制相似问题