使用 ExcelDataReader 时出现无效数据异常

Invalid Data Exception when using ExcelDataReader

我有一个使用 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.InvalidDataException'的异常发生在System.IO.Compression.dll,但未在用户代码中处理

消息:

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

从我第二次调用该函数开始出现异常。

可能是什么问题?

问题是您没有等待复制任务完成,所以当您读取 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));