我已经构建了一个via应用程序,用户可以在其中从他们的文件系统中选择zipfile (通过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 SubftpItem类是我自己的一个处理ftp的类。ftp.upload需要要发送的文件的流作为第三个参数。
但由于某些原因,zf.GetInputStream(i)总是什么也不给。
发布于 2010-11-03 02:52:19
首先,应该在调用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#示例here,它使用不同的方法GetNextEntry来迭代压缩文件的列表。
发布于 2010-11-03 02:15:38
我认为你在流的末尾,试着移到流的开头,这样你就可以阅读所有内容。
str.Seek(0, SeekOrigin.Begin)https://stackoverflow.com/questions/4080766
复制相似问题