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ファイルの場合、ストリーム変数を掘り下げると、次のように表示されます
ハンドル = 'stream.Handle' がタイプ 'System.ObjectDisposedException' の例外をスローしました
長さ = '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 ファイルのみを受け入れるように制限することにしました...