利用VB.Net解ZIP檔案

來源:互聯網
上載者:User

Imports System.IO<br />Imports java.io 'C:/WINNT/Microsoft.NET/Framework/v2.0.50727/vjslib.dll<br />Imports java.util</p><p>''' <summary><br />''' 解壓(Zip)<br />''' </summary><br />''' <param name="ZipFile">需要解壓的ZIP檔案</param><br />''' <param name="OutputDirectory">輸入目錄</param><br />''' <remarks>2010-01-30</remarks><br />Private Shared Sub Decompress(ByVal ZipFile As String, ByVal OutputDirectory As String)</p><p> Dim zipIns As New java.io.File(ZipFile)<br /> Dim directoryIns As New java.io.File(OutputDirectory)</p><p> '判斷壓縮檔是否存在<br /> '如果不存在的場合,則退出<br /> If zipIns.exists = False Then<br /> Return<br /> End If<br /> zipIns = Nothing</p><p> '判斷輸出目錄是否是目錄<br /> '如果不是目錄的場合,再進行其它判斷<br /> If directoryIns.isDirectory = False Then</p><p> '判斷輸出目錄的類型是否是一個檔案<br /> '如果不是檔案的場合<br /> If directoryIns.isFile = False Then<br /> Directory.CreateDirectory(OutputDirectory)</p><p> '如果輸出目錄是一個存在的檔案的場合,則退出<br /> Else<br /> Return<br /> End If<br /> End If<br /> directoryIns = Nothing</p><p> Const BUFFER As Integer = 2048 '每次讀取檔案資料的大小</p><p> Dim fileInput As FileInputStream '檔案流<br /> Dim inputStream As zip.ZipInputStream '輸入資料流<br /> Dim entry As zip.ZipEntry '壓縮資料入口執行個體<br /> Dim outputStream As FileOutputStream '輸出資料流<br /> Dim outputDir As String '輸出目錄<br /> Dim fileName As String '檔案名稱<br /> Dim folderSeparator As String '檔案夾分隔字元<br /> Dim folderSeparatorInZipFile As String '壓縮檔中的檔案夾分隔字元<br /> Dim dataCount As Integer '資料總數<br /> Dim fileData(BUFFER) As SByte '用於存放已讀取的檔案資料</p><p> '取得檔案夾分隔字元<br /> folderSeparator = java.io.File.separator<br /> folderSeparatorInZipFile = "/"</p><p> '判斷輸出目錄是否是一個完整的目錄<br /> '如果不是的場合,則編輯<br /> outputDir = OutputDirectory<br /> If outputDir.Substring(outputDir.Length - 1, 1) <> folderSeparator Then<br /> outputDir += folderSeparator<br /> End If</p><p> '初始化壓縮檔輸入資料流<br /> fileInput = New FileInputStream(ZipFile)<br /> inputStream = New zip.ZipInputStream(New BufferedInputStream(fileInput))</p><p> '迴圈解壓壓縮檔中每個檔案<br /> Do</p><p> '取得下一個壓縮資料的入口<br /> entry = inputStream.getNextEntry()<br /> If entry Is Nothing Then<br /> Exit Do<br /> End If</p><p> '判斷當前壓縮資料是檔案還是檔案夾<br /> '如果是檔案的場合<br /> If entry.isDirectory = False Then</p><p> '取得檔案名稱<br /> fileName = entry.getName()<br /> fileName = fileName.Substring(fileName.LastIndexOf(folderSeparator) + 1)</p><p> '如果是檔案夾的場合<br /> Else</p><p> '建立新檔案夾<br /> fileName = entry.getName()<br /> fileName = fileName.Replace(folderSeparator, folderSeparatorInZipFile)<br /> Directory.CreateDirectory(outputDir + fileName)</p><p> Continue Do</p><p> End If</p><p> outputStream = New java.io.FileOutputStream(outputDir & fileName)</p><p> '初始化取資料用的變數<br /> Array.Clear(fileData, 0, fileData.Length)<br /> dataCount = 0</p><p> '迴圈讀取當前需要解壓的檔案資料<br /> Do</p><p> '讀取檔案資料<br /> dataCount = inputStream.read(fileData, 0, BUFFER)<br /> If dataCount = -1 Then<br /> Exit Do<br /> End If</p><p> '將已讀取的檔案資料寫入輸出目錄中<br /> outputStream.write(fileData, 0, dataCount)</p><p> Loop</p><p> '關閉輸出資料流<br /> outputStream.flush()<br /> outputStream.close()</p><p> Loop</p><p> '關閉輸入資料流和檔案流<br /> inputStream.closeEntry()<br /> inputStream.close()<br /> fileInput.close()</p><p>End Sub

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.