【问题标题】:ICSharpCode.SharpZipLib Unexpected end of archiveICSharpCode.SharpZipLib 存档意外结束
【发布时间】:2018-03-28 22:09:30
【问题描述】:

所有, 我正在尝试在目录中查找文件,将它们压缩到流中,然后将它们放在另一个目录中。在压缩文件中,但我意外地结束了存档。任何帮助都会很棒。

他们进来

strReport '报告名称

strUser '要搜索的文件夹

strReportNameSearch '要搜索的文件

Dim strReports() As String
    Dim thefiles As Array
    Dim strZipFileName As String
    Dim dateTimeNow As String = DateTime.Now
    Dim dateOnlyString As String = dateTimeNow.ToString
    Dim buffer As Byte() = New Byte(4095) {}
    Try


        strReports = Split(strReport, "/") 'strReports(0) strReports(1)

            strZipFileName = "xxx.zip"

        Dim outStream As MemoryStream = New MemoryStream()
        Using zipOutputStream As New ZipOutputStream(outStream)
            zipOutputStream.SetLevel(9)
            thefiles = Directory.GetFiles(ConfigurationManager.AppSettings.Get("ReportLookup").ToString() & strUser, strReportNameSearch & "*", SearchOption.TopDirectoryOnly)
            For Each fileName As String In thefiles
                Dim fs As Stream = File.OpenRead(fileName)
                Dim entry As New ZipEntry(Path.GetFileName(fileName))
                entry.Size = fs.Length
                zipOutputStream.PutNextEntry(entry)

                Dim count As Integer = fs.Read(Buffer, 0, Buffer.Length)
                While count > 0
                    zipOutputStream.Write(Buffer, 0, count)
                    count = fs.Read(Buffer, 0, Buffer.Length)
                    If Not Response.IsClientConnected Then
                        Exit While
                    End If
                    Response.Flush()
                End While
                fs.Close()
            Next
            zipOutputStream.Flush()
            outStream.Flush()

            Dim wholezip As String = ConfigurationManager.AppSettings.Get("ReportLookup").ToString() & strReport & "\" & strZipFileName
            If (File.Exists(wholezip)) Then
                File.Delete(wholezip)
            End If
            Using fs As FileStream = New FileStream(wholezip, FileMode.Create)
                'outStream.Seek(0, SeekOrigin.Begin)
                outStream.Position = 0

                outStream.CopyTo(fs)

            End Using
            zipOutputStream.Close()

        End Using
    Catch ex As Exception
        ExceptionManager.Publish(ex)
    End Try

【问题讨论】:

    标签: zip filestream memorystream


    【解决方案1】:

    经过多次尝试,终于成功了

    使用 zf 作为 FileStream = New FileStream(wholezip, FileMode.OpenOrCreate, FileAccess.ReadWrite) ' 使用 zf 作为 FileStream = File.Create(wholezip) '打开压缩流 使用 zipOutputStream 作为新的 ZipOutputStream(zf) zipOutputStream.SetLevel(9) '设置压缩级别 '获取文件 thefiles = Directory.GetFiles(ConfigurationManager.AppSettings.Get("ReportLookup").ToString() & strUser, strReportNameSearch & "*", SearchOption.TopDirectoryOnly) '循环文件 对于文件中的每个文件名作为字符串 Dim zentry As ZipEntry = New ZipEntry(Path.GetFileName(fileName)) zentry.IsUnicodeText = True zipOutputStream.PutNextEntry(zentry) '计数字节 使用 streamReader 作为 FileStream = File.OpenRead(fileName) Dim count As Integer = streamReader.Read(buffer, 0, buffer.Length) 当计数 > 0 zipOutputStream.Write(缓冲区,0,计数) count = streamReader.Read(buffer, 0, buffer.Length) 结束时 结束使用 下一个 结束使用 结束使用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      相关资源
      最近更新 更多