在搜索并尝试找到 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”错误。
我知道为了完成这项工作(读取更大的文件而不会出错)我必须读取小块文件(或任何你想命名的块),或者我想可能逐字节读取它......
唯一的问题是我找不到办法。我确实找到了一些代码,但由于某种原因我无法使这些代码工作:(
如果有人可以推动我这样做,我很感激。
...但是,我在想,也许我不需要读取整个文件,因为我只需要在文件末尾添加一些字节,然后再次删除它们。
我将尝试解释我需要什么:
我只需要504B0506000000000000000000000000000000000000
在 zip 的末尾添加这个“”字节,然后就可以盲/隐藏 zip 的内容,然后我需要再次读取并删除这些字节。
a) 将字节追加到文件末尾
b) 再次删除这些字节
这听起来很简单,但是从我发现的所有代码和示例中,我无法使它们适应我的代码。
谢谢