SharpZipLib GetInputStream

时间:2010-11-02 18:12:53

标签: .net sharpziplib

我已经构建了一个web应用程序,用户可以从他的文件系统中选择一个zipfile(通过asp:FileUpload)。然后应用程序解压缩zip文件和ftp的每个文件。

这是代码:

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)总是什么都没有。

提前致谢 IVO

2 个答案:

答案 0 :(得分:0)

我认为你已经在流的最后,尝试移动到流的开头,这样你就可以阅读所有内容了。

str.Seek(0, SeekOrigin.Begin)

答案 1 :(得分:0)

首先,您应该在循环中增加i AFTER ,然后调用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来迭代压缩文件列表。