【发布时间】:2016-03-22 13:51:50
【问题描述】:
我刚刚在我的代码中遇到了一个错误,它打开了文件并读取了 rawData。
我得到的错误如下:
如您所见,我正在打开一个内存流,但在这样做时我收到一条错误消息,提示我无法访问该流?
我无法访问关闭的流有什么原因吗?
使用的代码:
// Try to decompress the file data.
byte[] rawData = null;
using (MemoryStream zipStream = new MemoryStream(fileData))
{
if (ZipPackage.IsZipFile(zipStream))
{
using (ZipPackage unzipper = ZipPackage.Open(zipStream))
{
// The zip package only contains one entry since GeoObject.FileData only contains one shape or POI.
if (unzipper.ZipPackageEntries.Count > 0)
{
StreamReader reader = new StreamReader(unzipper.ZipPackageEntries[0].OpenInputStream());
rawData = System.Text.Encoding.UTF8.GetBytes(reader.ReadToEnd());
}
}
}
}
堆栈
at System.IO.__Error.StreamIsClosed()
at System.IO.MemoryStream.set_Position(Int64 value)
at Telerik.Windows.Zip.ZipPackage.IsZipFile(Stream stream)
at Satmap.Planner.Silverlight.XmlConverters.DBGeoObjectsToFromDBShapes.ExtractRawFileData(GeoObject geoObject, Byte[] fileData)
at Satmap.Planner.Silverlight.DatabaseShapesToFromMapShapes.ConvertDatabaseShapesToMapShapes(GeoObject geoObject, Boolean filter)
at Satmap.Planner.Silverlight.DatabaseShapesToFromMapShapes.ConvertDatabaseShapesToMapShapes(GeoObject geoObject)
at Satmap.Planner.Silverlight.ViewControllers.MainMapViewController.BackgroundWorkerFileLoad_RunWorkerCompleted(Object sender, RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.<OnRun>b__1(Object state)
新堆栈:
at System.IO.MemoryStream.set_Capacity(Int32 value)
at System.IO.MemoryStream.EnsureCapacity(Int32 value)
at System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.Stream.InternalCopyTo(Stream destination, Int32 bufferSize)
at System.IO.Stream.CopyTo(Stream destination)
at Telerik.Windows.Zip.ZipArchive.WriteArchive()
at Telerik.Windows.Zip.ZipArchive.Dispose(Boolean disposing)
at Telerik.Windows.Zip.ZipArchive.Dispose()
at Satmap.Planner.Silverlight.XmlConverters.DBGeoObjectsToFromDBShapes.ExtractRawFileData(GeoObject geoObject, Byte[] fileData)
at Satmap.Planner.Silverlight.DatabaseShapesToFromMapShapes.ConvertDatabaseShapesToMapShapes(GeoObject geoObject, Boolean filter)
at Satmap.Planner.Silverlight.DatabaseShapesToFromMapShapes.ConvertDatabaseShapesToMapShapes(GeoObject geoObject)
at Satmap.Planner.Silverlight.ViewControllers.MainMapViewController.BackgroundWorkerFileLoad_RunWorkerCompleted(Object sender, RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.<OnRun>b__1(Object state)
【问题讨论】:
-
发布简短的可执行代码和包含堆栈的异常 ToString 输出。看起来像是 zip 库中的错误。
-
@usr 我已经添加了信息。如果您需要更多信息,请告诉我。
-
看起来像一个错误,内部代码崩溃。向泰勒里克报告。他们也希望查看样本数据以进行重现。
-
似乎不太可能。小心调试器的 Set Next Statement 命令。
标签: c# stream streamreader memorystream