.net SharpZipLib GetInputStream
我构建了一个Web应用程序,用户可以通过asp:FileUpload从文件系统中选择zipfile。然后应用程序解压zipfile和ftp的每个文件 代码如下:.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
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-太好了,很高兴听到这个消息