1

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

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

导入行代码:

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

现在这一行:

IExcelDataReader reader = ExcelReaderFactory.CreateOpenXmlReader(fs);

导致异常:

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

信息:

找不到中央目录记录的结尾。

异常发生在我第二次调用该函数时。

可能是什么问题?

异常截图

4

1 回答 1

3

问题是您没有等待 Copy 任务完成,因此当您阅读 时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)); 
于 2018-01-25T13:30:10.170 回答