.net SharpZipLib GetInputStream

.net SharpZipLib GetInputStream,.net,sharpziplib,.net,Sharpziplib,我构建了一个Web应用程序,用户可以通过asp:FileUpload从文件系统中选择zipfile。然后应用程序解压zipfile和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

我构建了一个Web应用程序,用户可以通过asp:FileUpload从文件系统中选择zipfile。然后应用程序解压zipfile和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我总是什么都不给。

我认为您已经到了流的末尾,请尝试移动到流的开头,以便您可以阅读所有内容

str.Seek(0, SeekOrigin.Begin)

首先,在调用GetInputStream之后,应该在循环中增加i。如果只有一个文件,我想这种逻辑总是会失败的

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示例,使用另一种方法GetNextEntry来迭代压缩文件列表。

移到开头没有帮助。还是一样的结果。增量确实位于错误的位置。但即使是正确的定位也无济于事。我得到的条目很好,如果我运行调试器并询问ze.Name,它会给出文件名;就像ze.Size为文件提供了正确的大小。我也尝试过像c示例一样迭代,没有luck@user495089-这是我的评论,还是下面的答案?在我看来,这里有一个简单的逻辑错误。您是否尝试过将未压缩的数据写入本地文件FileStream或MemoryStream,而不是使用FTP?zf.GetInputStream上的属性看起来像什么?上传的界面是什么?只是一条溪流,或者是其他类别的param 3?@Ivo-太好了,很高兴听到这个消息