我有一个包含多个文件的目录。我想将此文件夹压缩为zip(使用Xceed第三方DLL库)并通过HTTP推送给用户。同时我想创建文件夹中所有文件的日志,并将其作为压缩文件的一部分附加。
我目前正在使用DotNetZip并且它的工作非常完美。我需要在Xceed中使用它的等价物。
以下是使用DotNetZip的代码
Imports Ionic.Zip
' Tell the browser we're sending a ZIP file!
Dim downloadFileName As String = String.Format("YourDownload-{0}.zip", DateTime.Now.ToString("yyyy-MM-dd-HH_mm_ss"))
Response.ContentType = "application/zip"
Response.AddHeader("Content-Disposition", "filename=" & downloadFileName)
' Zip the contents of the selected files
Using zip As New ZipFile()
' Construct the contents of the README.txt file that will be included in this ZIP
Dim readMeMessage As String = String.Format("Your ZIP file {0} contains the following files:{1}{1}", downloadFileName, Environment.NewLine)
For i As Integer = 0 To MainDirs.Length - 1
readMeMessage &= String.Concat(vbTab, "* ", MainDirs(i), Environment.NewLine)
' Now add the file to the ZIP (use a value of "" as the second parameter to put the files in the "root" folder)
zip.AddFile(MainDirs(i), "Your Files")
Next
' Add the README.txt file to the ZIP
zip.AddEntry("README.txt", readMeMessage, Encoding.ASCII)
' Send the contents of the ZIP back to the output stream
zip.Save(Response.OutputStream)
End Using
End Sub
答案 0 :(得分:0)
使用Xceed支持后来回发送电子邮件。他们非常友好地帮助我找到解决问题的正确方法。
以下是可以正常使用的代码。
' Tell the browser we're sending a ZIP file!
Dim downloadFileName As String = String.Format("YourDownload-{0}.zip", DateTime.Now.ToString("yyyy-MM-dd-HH_mm_ss"))
Response.ContentType = "application/zip"
Response.AddHeader("Content-Disposition", "filename=" & downloadFileName)
Dim itemHeader As New ZipItemLocalHeader()
' Zip the contents of the selected files
Using zip As New ZipWriter(Response.OutputStream)
Dim directoryInfo As New DirectoryInfo(folderpath)
If directoryInfo.Exists Then
' Construct the contents of the README.txt file that will be included in this ZIP
Dim readMeMessage As String = String.Format("Your ZIP file {0} contains the following " & MainDirs.Length & " files:{1}{1}", downloadFileName, Environment.NewLine)
'Get files in the current directory and all subdirectories.
Dim _files As FileInfo() = directoryInfo.GetFiles("*.*", SearchOption.AllDirectories)
Dim buffer As Byte() = New Byte(65536) {}
Dim count As Integer = 0
For Each file As FileInfo In _files
'Create ZipItemLocalHeader for current item and write to archive.
Dim zipItemLocalHeader1 As New ZipItemLocalHeader(file.Name)
zip.WriteItemLocalHeader(zipItemLocalHeader1)
readMeMessage &= String.Concat(vbTab, (count + 1).ToString & "- ", Path.GetFileName(file.FullName), Environment.NewLine)
Using fs As FileStream = file.OpenRead()
'Write the current item's data to the zip archive
zip.WriteItemData(fs, buffer, 0, buffer.Length)
End Using
count += 1
Next file
itemHeader.FileName = "README.txt"
zip.WriteItemLocalHeader(itemHeader)
' Add the README.txt file to the ZIP
Dim data() As Byte = System.Text.Encoding.ASCII.GetBytes(readMeMessage)
zip.WriteItemData(data)
'Close the Zip archive. Writes the archive's central header.
zip.CloseZipFile()
End If
End Using