Чтение и запись двоичных файлов.

Двоичные (они же бинарные) файлы отличаются от текстовых тем, что могут состоять из произвольного набора байтов. Как правило, бинарные файлы имеют четко оговоренную структуру и не предназначены для непосредственного редактирования человеком. Тем не менее, для просмотра, анализа и правки бинарных файлов опытными пользователями используются различные шестнадцатиричные редакторы. Для чтения и записи бинарных файлов с помощью VBScript используется объект ADODB.Stream c параметром Type = adTypeBinary.

Примечание: объект ADODB.Stream можно использовать и для работы с текстовыми файлами, для этого используется параметр Type = adTypeText (выставляется по умолчанию при создании объекта).

Для чтения всего бинарного файла используем следующую функцию:

Function readBinaryFile(fPath)'возвращает байтовую строку - содержимое бинарного файла'

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set file = fso.getFile(fPath)

    Set binStream = CreateObject("ADODB.Stream")
    binStream.Type = adTypeBinary

    Call binStream.Open()
    Call binStream.LoadFromFile(file)
    readBinaryFile = binStream.Read()
    Call binStream.Close()
    
End Function

Для записи целого бинарного файла на диск используем функцию:

Sub writeBinaryFile(fPath, blob)'пишет blob в бинарный файл'

    Set binStream = CreateObject("ADODB.Stream")
    binStream.Type = adTypeBinary

    Call binStream.Open()
    Call binStream.Write(blob)
    Call binStream.SaveToFile(fPath, adSaveCreateOverWrite)'rewrite'
    Call binStream.Close()
    
End Sub

Пример (загружаем файл в память, выводим размер и записываем его в текущей директории):

Const fName = "cscript.exe"
fPath = "C:\Windows\System32\" & fName

WScript.Echo "Reading file " & Chr(34) & fPath & Chr(34)
blob = readBinaryFile(fPath)'получаем содержимое файла

WScript.Echo "Blob length: " & LenB(blob) & " bytes"'выводим размер полученного файла на экран

WScript.Echo "Creating new file.."

Call writeBinaryFile(fName, blob)'создаем файл в текущей директории

WScript.Echo "File was created in the current directory"
WScript.Echo "The End"