将流保存到 VB.NET 中的 .wav 文件

Saving a stream to a .wav file in VB.NET

我从我使用的在线服务中提取了一个 wave 文件,现在正试图保存返回的流。到目前为止,这是我的代码:

        Using wavout = request.GetResponse.GetResponseStream
                'error begins on next line
                wavout.Seek(0, SeekOrigin.Begin)
                Dim fs As FileStream = File.Create("output.wav")
                Dim buf(65536) As Byte
                Dim len As Integer = 0
                While ((len = wavout.Read(buf, 0, 65536)) > 0)
                    fs.Write(buf, 0, len)
                    fs.Close()
                End While
        End Using

当我 运行 代码时,它出现了一个异常 'this stream does not support seek operations'。

谁能看出我错在哪里?

有些流不支持搜索。您可以通过“CanSeek”等测试知道。 我已经更改了您的代码中的一些行,将其作为帮助您理解该机制的答案。

    Dim request As Net.HttpWebRequest = CType(Net.WebRequest.Create("yoururlhere.com"), Net.HttpWebRequest)
    Using wavout As IO.Stream = request.GetResponse().GetResponseStream()

        'usnig this test you can avoid exceptions on seeking
        If wavout.CanSeek Then
            wavout.Seek(0, System.IO.SeekOrigin.Begin)
        End If

        Using fs As IO.FileStream = IO.File.Create("output.wav")

            Dim buf(1024 * 8) As Byte
            Dim len As Integer

            Do
                len = wavout.Read(buf, 0, buf.Length)
                If len = 0 Then Exit Do
                fs.Write(buf, 0, len)
            Loop

        End Using

    End Using