6

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 のみで構成され、無効になります。どうすれば正しいバイト配列を取得できますか?

4

2 に答える 2

8

メモリ ストリームから読み取る場合は、ストリームの現在の位置が先頭にあることを確認する必要があります。

また、あなたはRead間違った方法を使用しています。読み取られたバイト数が返されますが、これは要求されたバイト数よりも少ない場合があります。正しく使用するには、ストリーム内のすべてのバイトを取得するまでループする必要があります。

ただし、ToArrayメソッドを使用して、ストリーム内のすべてをバイト配列として取得する必要があります。

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

  Return stream.ToArray()

End Function
于 2014-04-02T07:27:23.273 に答える