Тема: VBScript: чтение и запись бинарных данных
См. также JScript: чтение и запись бинарных данных.
Бесплатный COM-сервер JSBin.dll предназначен для работы с двоичными данными (файлами) и их конвертации в/из строки Base64. Компонент написан в Visual Basic 6 и требует наличия библиотеки MSVBVM60.DLL. Дистрибутив компонента (архив с примерами и документацией) имеет размер чуть более 35 Кб.
Запись данных в конец бинарного файла:
Set oJSBin = CreateObject("JSBin.BinaryOps")
errCode = oJSBin.BinaryOpen("C:\Temp\test.jpg", L)
' L - размер файла в байтах
errCode = oJSBin.BinaryWrite(String2ByteArray("Alex for Justas..."), L+1)
errCode = oJSBin.BinaryClose()
Function String2ByteArray(sQuery)
iQueryLen = Len(sQuery)
Dim byQuery()
For i = 1 To iQueryLen
ReDim Preserve byQuery(i-1)
byQuery(i-1) = CByte(Asc(Mid(sQuery, i, 1)))
Next
String2ByteArray = byQuery
End Function
Чтение данных из бинарного файла:
Set oJSBin = CreateObject("JSBin.BinaryOps")
StartPoint = 6 ' начиная с 7-го байта
LengthToRead = 4 ' прочитать 4 байта
errCode = oJSBin.BinaryRead("C:\Temp\test.jpg", StartPoint, LengthToRead, Arr)
res = ""
For i = 0 To LengthToRead - 1
res = res & Chr(Arr(i))
Next
WScript.Echo res ' JFIF (JPEG File Interchange Format)
Чтение данных из бинарного файла, конвертация байтов в числа (получение информации об изображении BMP):
' BITMAPFILEHEADER
' file type, байты 0 - 1, "BM"
' file size, байты 2 - 5
' BITMAPINFOHEADER
' width, байты 18 - 21
' height, байты 22 - 25
' BitsPerPixel, байты 28 - 29
Set bin = CreateObject("JSBin.BinaryOps")
path = "C:\Temp\test.bmp"
L = 30 ' читаем 30 байтов
e = bin.BinaryRead(path, 0, L, A)
If e <> 0 then
WScript.Echo "не удалось прочитать файл"
WScript.Quit
End If
e = Chr(A(0)) & Chr(A(1))
s = "Тип файла: " & e & VbCrLf
e = bin.GetNumFrom4Bytes(A(2), A(3), A(4), A(5))
s = s & "Размер файла: " & e & " байтов" & VbCrLf
e = bin.GetNumFrom4Bytes(A(18), A(19), A(20), A(21))
s = s & "Ширина: " & e & " точек (пикселей)" & VbCrLf
e = bin.GetNumFrom4Bytes(A(22), A(23), A(24), A(25))
s = s & "Высота: " & e & " точек (пикселей)" & VbCrLf
e = bin.GetNumFrom2Bytes(A(28), A(29))
s = s & "Глубина цвета (битов на пиксель): " & e
WScript.Echo s
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.