2010-11-02 55 views
0

我已經構建了一個web應用程序,用戶可以從他的文件系統中選擇一個zip文件(通過asp:FileUpload)。然後,應用程序解壓縮zipfile和ftp的每個文件。SharpZipLib GetInputStream

下面的代碼:

Public Sub Unzip(ByVal str As Stream, ByVal constr As String) 
    Dim zf As New ZipFile(str) 
    Dim ze As ZipEntry 
    Dim i As Integer = 0 
    While i < zf.Count 
     ze = zf.EntryByIndex(i) 
     i = i + 1 
     Dim ftp As New ftpItem(constr) 
     ftp.upload(ze.Name, "pic", zf.GetInputStream(i), ze.Name, ze.Name) 

    End While 
    zf.Close() 
End Sub 

的ftpItem類是一類我自己至極的處理FTP。 ftp.upload需要將第三個參數作爲要發送文件的流。

但由於某些原因,zf.GetInputStream(i)總是沒有提供任何東西。

在此先感謝 伊沃

回答

0

一件事,你應該增加i循環你叫GetInputStream了。如果只有一個文件,這個邏輯總會失敗,我想。

While i < zf.Count 
    ze = zf.EntryByIndex(i) 

    Dim ftp As New ftpItem(constr) 
    ftp.upload(ze.Name, "pic", zf.GetInputStream(i), ze.Name, ze.Name) 

    i = i + 1 

End While 

如果不工作,有一個據稱工作C#示例here,使用不同的方法GetNextEntry迭代壓縮文件的列表。

+0

搬到開始並沒有幫助。仍然是相同的結果。增量確實在錯誤的地方。但即使把它放在正確的位置也無濟於事。我得到的條目是好的,如果我運行調試器,並且詢問ze.Name,它會給出我的文件名;就像ze.Size爲我提供了正確的文件大小。 (我也嘗試了迭代,就像沒有運氣的c#示例) – Ivo 2010-11-02 18:59:00

+0

@ user495089 - 是我的評論還是下面的答案?對我來說,就像你在這裏有一個簡單的邏輯錯誤 – 2010-11-02 19:02:36

+0

您是否試過將未壓縮的數據寫入本地文件('FileStream')或'MemoryStream'而不是使用FTP? 'zf.GetInputStream()'屬性的外觀是什麼?什麼是「上傳」的界面?只是一個'Stream',或者其他一些類作爲參數3? – 2010-11-02 19:20:14

0

我認爲你是在流的末尾,嘗試移動到流的開頭,所以你可以讀到的一切。

str.Seek(0, SeekOrigin.Begin)