Сохранение потока в файл .wav в VB.NET - PullRequest
0 голосов
/ 03 марта 2020

Я извлек волновой файл из используемого онлайн-сервиса и сейчас пытаюсь сохранить возвращенный поток. Пока это мой код:

        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

Когда я запускаю код, возникает исключение, говорящее «этот поток не поддерживает операции поиска».

Может кто-нибудь увидеть, где я? я иду не так?

1 Ответ

1 голос
/ 03 марта 2020

Некоторые потоки не поддерживают поиск. Вы можете узнать это с помощью теста, такого как «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
...