2011-04-07 94 views
4

我有一個二進制字符串,我需要寫入一個文件。我有一種感覺,這應該一個簡單的程序,但話又說回來,VBScript中。 FileSystemObject沒有任何幫助,因爲它消除了數據。該Stream對象看起來很有希望,與它的adBinaryMode及其Write方法,但Write方法需要一個字節數組,並不會似乎接受一個變量數組來代替。因爲VBScript數組是所有變長數組,這似乎是有問題的。如何在VBScript中將二進制數據寫入磁盤?

所以,我怎麼只寫數據到一個文件?

編輯:我要補充的是,整個事情必須是VBScript中。沒有額外的組件。對不起,我也不喜歡它。

回答

5

它也可以與普通FileSystemObject,這裏是代碼我使用自定義上傳腳本,我寫了很久以前使用的代碼,我在網上找到二進制字符串轉換爲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 
+0

我已經撞我的頭撞在牆上了這整個ASP文件上傳的問題,這是最後的東西,只是工作:-)。我不能相信這樣的基本需要,這樣的第三方擺弄: - /。謝謝你,謝謝! – mfeineis 2016-06-22 14:37:18

+0

@mfeineis大聲笑,很高興這oooold代碼是如此巨大的幫助! :) – 2016-06-22 14:40:06

+0

真棒,現在我必須與這古老的東西也爭鬥,這似乎是唯一的解決方案,只是無數小時的擺弄/測試/搜索後的作品。 – ViRuSTriNiTy 2016-07-20 10:53:09

2

Here幾個選項。這裏描述的最有趣的變體在自定義函數BinaryToString的幫助下將二進制數據轉換爲字符串。

1

寫VBScript中的二進制文件很簡單,但需要一次寫入一個字節。作爲演示,這裏有一個簡單的腳本,用於創建單個像素GIF文件。生成的文件具有完全寫入的二進制內容,僅此而已,並且是有效的GIF文件。

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 
相關問題