在SharpZipLib中“试图读过流的末尾”

时间:2012-09-17 18:33:42

标签: c# excel zip

我在生产系统中有一个错误,当用户选择要在软件内部上传的excel(.xlsx)文件时,该应用程序会抛出异常:Attempted to read past the end of the stream. - at ICSharpCode.SharpZipLib.Zip.ZipHelperStream.ReadLEShort()

我正在使用ExcelDataReader,SharpZipLib已更新为0.65。 有人有想法吗?

使用SharpZipLib的ExcelDataReader Extract方法: zipFile = new ZipFile(filestream);

引发了异常

感谢。

public bool Extract(Stream fileStream)

    {
        if (null == fileStream) return false;

        CleanFromTemp();

        NewTempPath();

        _isValid = true;

        ZipFile zipFile = null;

        try
        {
            zipFile = new ZipFile(fileStream);

            IEnumerator enumerator = zipFile.GetEnumerator();

            while (enumerator.MoveNext())
            {
                ZipEntry entry = (ZipEntry)enumerator.Current;

                ExtractZipEntry(zipFile, entry);
            }
        }
        catch (Exception ex)
        {
            _isValid = false;
            _exceptionMessage = ex.Message;
            Log.Trace(string.Format("{0} - {1}",ex.Message ,ex.StackTrace), this.GetType());

            CleanFromTemp();
        }
        finally
        {
            fileStream.Close();

            if (null != zipFile) zipFile.Close();
        }

        return _isValid ? CheckFolderTree() : false;
    }

1 个答案:

答案 0 :(得分:0)

如果zip文件不符合ZIP标准,则会发生这种情况。 xlsx文件中有一些东西会丢弃解压缩程序。

您可以尝试使用另一个zip库(或检查现有库0.86 is the current build的更新)并使用它将文件解压缩到流中,遗憾的是我没有其他库的建议尝试因为我必须修复同样的问题,所以我只能修复zip标题,而不是找到一个新的zip库。