2013-08-20 74 views
0

我有一個包含多個文件的目錄。我想壓縮此文件夾到一個zip(使用Xceed第三方DLL庫),並通過HTTP推送給用戶。同時,我想創建文件夾內所有文件的日誌,並將其附加到壓縮文件的一部分。使用Xceed在旅途中壓縮目錄

我目前使用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

與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