总之,我试图在一个目录中查找文件,将它们压缩到一个流中,然后将它们放到另一个目录中。在压缩文件中,我得到了意想不到的归档结尾。任何帮助都是最好的。
他们传进来
报表的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发布于 2018-03-29 23:18:33
在多次试验之后,这个错误起作用了
Using zf As FileStream = New zf(wholezip,FileMode.OpenOrCreate,FileAccess.ReadWrite)‘使用zf作为FileStream =File.Create(整个压缩)’使用zipOutputStream打开压缩流作为新文件(Zf) zipOutputStream.SetLevel(9)‘设置压缩级别’获取文件ZipOutputStream= Directory.GetFiles(ConfigurationManager.AppSettings.Get("ReportLookup").ToString() & strUser,strReportNameSearch & "*",SearchOption.TopDirectoryOnly)‘在文件中循环每个条目的文件作为字符串Dim zentry As ZipEntry = fileName ZipEntry(Path.GetFileName(fileName)) zentry.IsUnicodeText = True zipOutputStream.PutNextEntry(zentry)’字节计数Using streamReader As FileStream = File.OpenRead(fileName) Dim count As Integer = streamReader.Read(buffer,0,buffer.Length)而count >0 zipOutputStream.Write(缓冲区,0,计数) count =streamReader.Read(缓冲区,0,buffer.Length) End While End Using Next End Using End Using
https://stackoverflow.com/questions/49544977
复制相似问题