从MemoryStream写入FileStream会破坏数据

时间:2018-03-15 15:07:32

标签: vb.net

我正在尝试将一个字节数组写入文件,我认为这应该很简单。我正在尝试使用MemoryStream获取byte()并将其复制到FileStream。请参阅下面的代码。

If File.Exists(path) Then
    Dim sr As StreamReader = New StreamReader(path)
    Do While sr.Peek() >= 0
        sr.Read()
    Loop
    sr.Close()

Else
    res = GetInfo(timeout, bytes)
    If res = 0 Then
        Dim s As Stream = New FileStream(path, FileMode.Create, FileAccess.ReadWrite)
        Dim stream As New MemoryStream(bytes)

        stream.CopyTo(s)
        stream.Dispose()

       ' do other stuff
    End If
End If

它编译得很好但是当我检查写入的文件时,数据已损坏,看起来像:

ͤI¶µ&Ôœ¸Šíd9ïè´5ì#~¿g•ø9£ÓÙ=¸Š€8j]f½’˜»4e18+jš³VÀú¸àc?ê

我尝试过的其他事情:

  • 使用StreamWriter。它工作正常,但我在这里读到它应该只用于String而不是byte s,所以我没有使用它。
  • 使用FileStream.Write方法,数据再次损坏
  • 使用MemoryStream.WriteTo方法,数据再次损坏

字节数组如下所示:

105
203
13
47
...

我的数据实际上是Byte()但是使用Byte方法损坏并使用String方法,因此有点令人困惑。我错过了一步还是什么?

1 个答案:

答案 0 :(得分:2)

如果您的内存流可以正确读取文件/字节,那么它可以将其写入!

 Dim bytes as Byte() = New Byte(memoryStream.length)
 filestream.Write(bytes, 0, bytes.Length)
 ms.Close

如果只是一些文字数据,请执行以下操作:

 IO.File.WriteAllText("pathhere","String Here")

要阅读流,请执行以下操作:

 Using ms As MemoryStream = New MemoryStream()
 Using file As FileStream = New FileStream("filePath", FileMode.Open, FileAccess.Read)
        Dim bytes As Byte() = New Byte(file.Length - 1) {}
        file.Read(bytes, 0, CInt(file.Length))
        ms.Write(bytes, 0, CInt(file.Length))
    End Using
End Using