Tuve un problema similar hace un año. Sabemos que los objetos TextStream están destinados a datos de texto ANSI o Unicode, no a datos binarios; su método .readAll() produce un resultado dañado si la transmisión es binaria. Pero hay una solución. Leer los caracteres uno por uno en una matriz funciona bien. Esto debería permitirle leer datos binarios en cadenas VB y escribirlos en el disco. Cuando manipule más tales cadenas binarias, no olvide que ciertas operaciones pueden resultar en cadenas rotas porque están pensadas solo para texto. Yo siempre convierto cadenas binarias en matrices enteras antes de trabajar con ellas.
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
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
Function makeArray(n) ' Small utility function Dim s s = Space(n) makeArray = Split(s," ") End Function
¿Necesita esta línea? 'Dim oTxtStream: establece oTxtStream = oFSO.createTextFile (strPath)' –
esa línea se supone que debe verificar el acceso de escritura de los archivos. Si lo elimina, en algunos casos la secuencia de comandos puede bloquearse. – n3rd4i