Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I write binary data to disk in VBScript?

I have a binary string that I need to write to a file. I have a feeling that this should be a simple procedure, but then again, VBScript. The FileSystemObject is of no help, since it munges the data. The Stream object looks promising, with it's adBinaryMode and its Write method, but the Write method requires a byte array and won't seem to accept a variant array instead. Since VBScript arrays are all variant arrays, this seems problematic.

So, how do I just write the data to a file?

EDIT: I should add that the whole thing has to be VBScript. No extra components. Sorry, I don't like it either.

like image 309
Thom Smith Avatar asked Apr 07 '11 18:04

Thom Smith


People also ask

How do you write binary data to a file?

Write Bytes to File in Python Example 1: Open a file in binary write mode and then specify the contents to write in the form of bytes. Next, use the write function to write the byte contents to a binary file.

Which method is used for writing data in binary file?

Writing: fwrite() function is used in the program to write the data read from the text file to the binary file in binary form.

How is a binary file stored?

A binary file is one that does not contain text. It is used to store data in the form of bytes, which are typically interpreted as something other than textual characters. These files usually contain instructions in their headers to determine how to read the data stored in them.

Which method is valid for reading from a binary file?

To read from a binary file Use the ReadAllBytes method, which returns the contents of a file as a byte array.


3 Answers

It's also possible with the ordinary FileSystemObject, here is code I'm using in custom upload script that I wrote long time ago using code I found online that converts binary string to ASCII:

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("file path here")
objFile.Write(RSBinaryToString(strBinaryContents))
objFile.Close
Set objFile=Nothing
Set objFSO=Nothing

Private Function RSBinaryToString(xBinary)
    'Antonin Foller, http://www.motobit.com
    'RSBinaryToString converts binary data (VT_UI1 | VT_ARRAY Or MultiByte string)
    'to a string (BSTR) using ADO recordset

    Dim Binary
    'MultiByte data must be converted To VT_UI1 | VT_ARRAY first.
    If vartype(xBinary)=8 Then Binary = MultiByteToBinary(xBinary) Else Binary = xBinary

    Dim RS, LBinary
    Const adLongVarChar = 201
    Set RS = CreateObject("ADODB.Recordset")
    LBinary = LenB(Binary)

    If LBinary>0 Then
        RS.Fields.Append "mBinary", adLongVarChar, LBinary
        RS.Open
        RS.AddNew
        RS("mBinary").AppendChunk Binary 
        RS.Update
        RSBinaryToString = RS("mBinary")
    Else  
        RSBinaryToString = ""
    End If
End Function

Function MultiByteToBinary(MultiByte)
    '© 2000 Antonin Foller, http://www.motobit.com
    ' MultiByteToBinary converts multibyte string To real binary data (VT_UI1 | VT_ARRAY)
    ' Using recordset
    Dim RS, LMultiByte, Binary
    Const adLongVarBinary = 205
    Set RS = CreateObject("ADODB.Recordset")
    LMultiByte = LenB(MultiByte)
    If LMultiByte>0 Then
        RS.Fields.Append "mBinary", adLongVarBinary, LMultiByte
        RS.Open
        RS.AddNew
        RS("mBinary").AppendChunk MultiByte & ChrB(0)
        RS.Update
        Binary = RS("mBinary").GetChunk(LMultiByte)
    End If
    MultiByteToBinary = Binary
End Function
like image 127
Shadow Wizard Hates Omicron Avatar answered Oct 14 '22 00:10

Shadow Wizard Hates Omicron


Here are several options. The most interesting variant described there converts the binary data to a string with the help of a custom function BinaryToString.

like image 42
Helge Klein Avatar answered Oct 14 '22 00:10

Helge Klein


Writing to a binary file in VBScript is simple but requires you to write one byte at a time. As a demonstration, here is a simple script that creates a single pixel GIF file. The resulting file has exactly the binary content written to it, nothing more, and is a valid GIF file.

Dim GifFile : Set GifFile = CreateObject("Scripting.FileSystemObject").CreateTextFile("SinglePixel.gif")

With GifFile
    .write chr(&h47) 'GIF87a
    .write chr(&h49)
    .write chr(&h46)
    .write chr(&h38)
    .write chr(&h37)
    .write chr(&h61)
    .write chr(&h01) 'Width
    .write chr(&h00)
    .write chr(&h01) 'Height
    .write chr(&h00)
    .write chr(&h80) 'Use global color map
    .write chr(&h00) 'Background
    .write chr(&h00) 'End of header
    .write chr(&h00) 'Color map color #1 in RGB
    .write chr(&h00)
    .write chr(&h00)
    .write chr(&hFF) 'Color map color #2 in RGB
    .write chr(&hFF)
    .write chr(&hFF)
    .write chr(&h2C) 'Image descriptor
    .write chr(&h00) 'Left
    .write chr(&h00)
    .write chr(&h00) 'Top
    .write chr(&h00)
    .write chr(&h01) 'Width
    .write chr(&h00)
    .write chr(&h01) 'Height
    .write chr(&h00)
    .write chr(&h40) 'Use global color map / seq order / 1 bit per pixel
    .write chr(&h02) 'Code size
    .write chr(&h02) 'Blok byte count
    .write chr(&h44) 'LZW data
    .write chr(&h01)
    .write chr(&h00) 'Terminate data stream
    .write chr(&h3B) 'Gif terminator
End With

GifFile.Close
like image 2
Regis Desrosiers Avatar answered Oct 14 '22 01:10

Regis Desrosiers