0

ユーザーがファイルシステムから(asp:FileUploadを介して)zipファイルを選択できるWebアプリケーションを構築しました。次に、アプリケーションは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は、3番目のパラメーターとしてファイルを送信するためのストリームを必要とします。

しかし、何らかの理由で、zf.GetInputStream(i)は常に何も提供しません。

4

2 に答える 2

0

あなたはストリームの最後にいると思います。すべてを読むことができるように、ストリームの最初に移動してみてください。

str.Seek(0, SeekOrigin.Begin)
于 2010-11-02T18:15:38.430 に答える
0

まず、を呼び出しi後、ループ内でインクリメントする必要があります。ファイルが1つしかない場合、このロジックは常に失敗します。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 に答える