0

我有一个包含多个文件的目录。我想将此文件夹压缩为 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
4

1 回答 1

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
于 2013-08-28T08:32:07.843 回答