如何读取块中的字节以避免内存不足异常?或者是其他东西

时间:2012-11-20 15:53:21

标签: memory byte out

搜索并试图找到解决方案2天后,我决定在这里发帖寻求帮助......

我有一个代码来读取和写入文件的字节(比如十六进制编辑器),从这里开始工作非常好: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”错误。

我知道为了使这项工作(阅读更大的文件没有错误)我必须读取小块文件(或任何你想要命名的块),或者我可以逐字节地读取它...我想... / p>

唯一的问题是我无法找到办法。我找到了一些代码,但由于某种原因,我无法使代码工作:(

如果有人可以帮我推动这一点,我感到很沮丧。

...但是,我想,也许我不需要读取整个文件,因为我只需要在文件末尾添加一些字节然后再删除它们。

我会尝试解释我需要的东西:

我只需要在一个zip的末尾添加这个“504B0506000000000000000000000000000000000000”字节,然后执行blind / hide zip的内容,然后我需要再次读入并删除这些字节。

a)将字节附加到文件末尾

b)再次删除这些字节

这听起来很简单但是从我发现的所有代码和示例中我都无法使它们适应我的代码。

谢谢

0 个答案:

没有答案