Search code examples
vbscriptbinaryfiles

How to concatenate binary file using ADODB.stream in VBscript?


I have to concatenate 3 binary files into one, but I am getting an error while I try it. Here is my code:

' This is a simple example of managing binary files in
' vbscript using the ADODB object
dim inStream,outStream
const adTypeText=2
const adTypeBinary=1

' We can create the scream object directly, it does not
' need to be built from a record set or anything like that
set inStream=WScript.CreateObject("ADODB.Stream")

' We call open on the stream with no arguments.  This makes
' the stream become an empty container which can be then
' used for what operations we want
inStream.Open
inStream.type=adTypeBinary

' Now we load a really BIG file.  This should show if the object
' reads the whole file at once or just attaches to the file on
' disk
' You must change this path to something on your computer!
inStream.LoadFromFile(Zip7sSFX)
dim buff1
buff1 = inStream.Read()
inStream.LoadFromFile(Config)
dim buff2 
buff2= inStream.Read()
inStream.LoadFromFile(PackName)
dim buff3 
buff3= inStream.Read()
' Copy the dat over to a stream for outputting
set outStream=WScript.CreateObject("ADODB.Stream")
outStream.Open
outStream.type=adTypeBinary

dim buff
buff=buff1 & buff2 & buff3

' Write out to a file
outStream.Write(buff)
' You must change this path to something on your computer!
outStream.SaveToFile(OutputFile)

outStream.Close()
inStream.Close()

End Sub

What I am doing wrong? It complains about buff type mismatch.


Solution

  • You cannot concatenate your buffs with & as they are (byte())Variants, instead you can append to the output stream directly:

    const adTypeText=2
    const adTypeBinary=1
    
    dim inStream, outStream
    
    set inStream=WScript.CreateObject("ADODB.Stream")
    set outStream=WScript.CreateObject("ADODB.Stream")
    
    inStream.Open
    inStream.type=adTypeBinary
    
    outStream.Open
    outStream.type=adTypeBinary
    
    inStream.LoadFromFile(Zip7sSFX)
    outStream.Write = inStream.Read()
    
    inStream.LoadFromFile(Config)
    outStream.Write = inStream.Read()
    
    inStream.LoadFromFile(PackName)
    outStream.Write = inStream.Read()
    
    outStream.SaveToFile(OutputFile)
    
    outStream.Close()
    inStream.Close()