У меня была похожая проблема год назад.Мы знаем, что объекты TextStream предназначены для текстовых данных ANSI или Unicode, а не двоичных данных;их метод .readAll () создает поврежденный вывод, если поток является двоичным.Но есть обходной путь.Чтение символов один за другим в массив работает нормально.Это должно позволить вам читать двоичные данные в строки VB и записывать их обратно на диск.При дальнейшей манипуляции с такими двоичными строками не забывайте, что некоторые операции могут привести к разрыву строк, поскольку они предназначены только для текста.Я, например, всегда преобразовываю двоичные строки в целочисленные массивы, прежде чем работать с ними.
Function readBinary(path)
Dim a
Dim fso
Dim file
Dim i
Dim ts
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.getFile(path)
If isNull(file) Then
MsgBox("File not found: " & path)
Exit Function
End If
Set ts = file.OpenAsTextStream()
a = makeArray(file.size)
i = 0
' Do not replace the following block by readBinary = by ts.readAll(), it would result in broken output, because that method is not intended for binary data
While Not ts.atEndOfStream
a(i) = ts.read(1)
i = i + 1
Wend
ts.close
readBinary = Join(a,"")
End Function</p>
<p>Sub writeBinary(bstr, path)
Dim fso
Dim ts
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set ts = fso.createTextFile(path)
If Err.number <> 0 Then
MsgBox(Err.message)
Exit Sub
End If
On Error GoTo 0
ts.Write(bstr)
ts.Close
End Sub</p>
<p>Function makeArray(n) ' Small utility function
Dim s
s = Space(n)
makeArray = Split(s," ")
End Function