【问题标题】:Converting MemoryStream to Byte Array in VB.Net在 VB.Net 中将 MemoryStream 转换为字节数组
【发布时间】:2014-05-13 07:25:50
【问题描述】:

我正在尝试将从richeditDocument 生成的内存流转换为字节数组。代码如下:

Public Sub saveAsTemplate_Click(ByVal sender As Object, ByVal e As System.EventArgs)

    Dim ms As MemoryStream = New MemoryStream()
    richEditControl1.SaveDocument(ms, DocumentFormat.Rtf)
    GetStreamAsByteArray(ms)

    MessageBox.Show("save")

End Sub

Private Function GetStreamAsByteArray(ByVal stream As MemoryStream) As Byte()

    Dim streamLength As Integer = Convert.ToInt32(stream.Length)

    Dim fileData As Byte() = New Byte(streamLength) {}

    ' Read the file into a byte array
    stream.Read(fileData, 0, streamLength)
    stream.Flush()
    stream.Close()

    Return fileData

End Function

流是生成的,因为我可以获得流长度,但是最终的位数组仅由 0 组成,使其无效。我怎样才能得到它的正确字节数组?

【问题讨论】:

    标签: vb.net silverlight bytearray richedit-control


    【解决方案1】:

    如果要从内存流中读取,需要确保流的当前位置在开头。

    另外,您使用的Read 方法错误。它返回读取的字节数,可能小于请求的字节数。要正确使用它,您需要循环直到获得流中的所有字节。

    但是,您应该只使用ToArray 方法将流中的所有内容作为字节数组获取:

    Private Function GetStreamAsByteArray(ByVal stream As MemoryStream) As Byte()
    
      Return stream.ToArray()
    
    End Function
    

    【讨论】:

      【解决方案2】:

      '这适用于我的 100mb .txt 文件

          Public Function read()
      
          Dim tmpdb(0) As String
      
          Try
      
              tmpdb = IO.File.ReadAllLines("C:\Users\Admin01\Desktop\TmpTxt.txt")
              FileOpen(1, "C:\Users\Admin01\Desktop\IRSH_TEST_DB.jrdb", OpenMode.Binary, OpenAccess.Write)
              FilePut(1, tmpdb)
              FileClose(1)
      
              MessageBox.Show("SUCCES!")
      
          Catch ex As Exception
              MessageBox.Show(ex.Message)
          End Try
      
      End Function
      

      【讨论】:

        猜你喜欢
        • 2010-09-18
        • 1970-01-01
        • 2018-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-08
        • 2012-03-02
        • 1970-01-01
        相关资源
        最近更新 更多