検索して2日間解決策を見つけようとした後、私は最終的にここに投稿して助けを求めることにしました...
ここから取得した非常にうまく機能するファイルのバイトを読み書きするコード(16進エディターなど)があります:http://www.novahq.net/forum/showthread.php?t=42592 ここにコードがあります:
Public Class Form1
Private Shared Function HexStringToByteArray(ByRef strInput As String)
As Byte()
Dim length As Integer
Dim bOutput As Byte()
Dim c(1) As Integer
length = strInput.Length / 2
ReDim bOutput(length - 1)
For i As Integer = 0 To (length - 1)
For j As Integer = 0 To 1
c(j) = Asc(strInput.Chars(i * 2 + j))
If ((c(j) >= Asc("0")) And (c(j) <= Asc("9"))) Then
c(j) = c(j) - Asc("0")
ElseIf ((c(j) >= Asc("A")) And (c(j) <= Asc("F"))) Then
c(j) = c(j) - Asc("A") + &HA
ElseIf ((c(j) >= Asc("a")) And (c(j) <= Asc("f"))) Then
c(j) = c(j) - Asc("a") + &HA
End If
Next j
bOutput(i) = (c(0) * &H10 + c(1))
Next i
Return (bOutput)
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim myFile As String = "..\..\Test.jpg"
Dim myBytes As Byte() =
My.Computer.FileSystem.ReadAllBytes(myFile)
Dim txtTemp As New System.Text.StringBuilder()
For Each myByte As Byte In myBytes
txtTemp.Append(myByte.ToString("X2"))
Next
RichTextBox1.Text = txtTemp.ToString()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim myFile As String = "..\..\Test2.jpg"
Dim myBytes As Byte() = HexStringToByteArray(RichTextBox1.Text)
My.Computer.FileSystem.WriteAllBytes(myFile, myBytes, False)
End Sub
End Class
これは非常にうまく機能していますが、小/中サイズのファイルでのみ機能します。512MB 以上のファイルをロードしようとすると、「System.OutOfMemoryException」エラーが発生します。
これを機能させる(エラーなしで大きなファイルを読み取る)には、ファイルを小さな断片(または名前を付けたいチャンク)で読み取るか、バイトごとに読み取る必要があることを知っています...
唯一の問題は、それを行う方法が見つからなかったことです。いくつかのコードを見つけましたが、何らかの理由でそのコードを機能させることができませんでした:(
誰かが私にこれを後押ししてくれれば幸いです。
...しかし、ファイルの最後にいくつかのバイトを追加してから、それらを再度削除する必要があるだけなので、ファイル全体を読み取る必要はないかもしれません。
私が必要なものを説明しようとします:
この " " バイトを zip の末尾に追加するだけ504B0506000000000000000000000000000000000000
で、zip のコンテンツをブラインド/非表示にしてから、もう一度読み込んでそれらのバイトを削除する必要があります。
a) ファイルの末尾にバイトを追加
b)それらのバイトを再度削除します
これは非常に単純に聞こえますが、私が見つけたすべてのコードと例から、それらを自分のコードに適応させることができませんでした。
ありがとうございました