0

我已经构建了一个 web 应用程序,用户可以在其中从他们的文件系统中选择一个 zip 文件(通过 asp:FileUpload)。然后应用程序解压缩 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(i) 总是什么都不提供。

4

2 回答 2

0

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

str.Seek(0, SeekOrigin.Begin)
于 2010-11-02T18:15:38.430 回答
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# 示例它使用不同的方法GetNextEntry来迭代压缩文件列表。

于 2010-11-02T18:52:18.627 回答