我在读取 XLSX 文件时遇到问题(XLS 文件完全没有问题),我相信它与 FileStream 对象有关。这是我的代码:
string extention = Path.GetExtension(fileName);
using (FileStream stream = File.Open(fileName, FileMode.Open, FileAccess.Read))
{
IExcelDataReader excelReader = null;
try
{
switch (extention.ToLower())
{
case ".xls":
excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
break;
case ".xlsx":
excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
break;
....
同样,当我从 XLS 文件中读取时,它可以工作,但是对于 XLSX 文件,当我深入研究流变量时,我看到以下内容
Handle = 'stream.Handle' 引发了“System.ObjectDisposedException”类型的异常
Length = 'stream.Length' 引发了“System.ObjectDisposedException”类型的异常
……
FileStream 的其他成员也有同样的例外。当我进一步深入研究这些异常时,我看到:
base {System.InvalidOperationException} = {“无法访问已关闭的文件。”}
作为消息。这是什么意思?我假设这会阻止我从这个文件中读取。有没有办法解决?为什么它适用于 XLS 而不是 XLSX 文件?
为埃里克编辑:
没有骰子。我在 MemoryStream 对象上收到“无法访问关闭的流”异常。我正在按如下方式设置 MemoryStream(根据 [http://justtwoshare.blogspot.com/2010/04/how-to-convert-filestream-to.html](本网站):
FileStream stream = File.Open(fileName, FileMode.Open, FileAccess.Read);
MemoryStream memStream = new MemoryStream();
memStream.SetLength(stream.Length);
stream.Read(memStream.GetBuffer(), 0, (int)stream.Length);
memStream.Flush();
最终编辑:
在没有找到问题所在后,我求助于将程序限制为仅接受 xls 文件...