我已经构建了一个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
答案 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
来迭代压缩文件列表。