用VBS读写二进制文件的另一种方法

标签: , , , ,

之前写的那篇给出的方法虽然不错,但是当文件过大时(其实很小,也就几M),对应的数组也会很大,然后会出现运行时错误,提示内存耗尽,为此我郁闷了好久。

最近在博客的流量记录中发现百度关键字“一些很恶作剧的vbs程序”(看来现在的年轻人很喜欢玩这口),于是打开久违的百度搜索了一下,发现出现在第三。出现在第二的是百度HI,上面也是一个恶作剧程序,而且还是加密的。我尝试着解密,却发现这个加密似乎比前几天解密的那个病毒更变态,未果。

虽然我没有把那个程序解密出来(如果哪位真正的高手会,麻烦指点一下),但是从中领悟出了用VBS读写二进制文件的另一种方法,即Microsoft.XMLDOM+ADODB.Stream。这个方法的效率比原来那个高得多,而且似乎没有文件大小限制。

Function ReadBinary(FileName)
	Const adTypeBinary = 1
	Dim stream, xmldom, node
	Set xmldom = CreateObject("Microsoft.XMLDOM")
	Set node = xmldom.CreateElement("binary")
	node.DataType = "bin.hex"
	Set stream = CreateObject("ADODB.Stream")
	stream.Type = adTypeBinary
	stream.Open
	stream.LoadFromFile FileName
	node.NodeTypedValue = stream.Read
	stream.Close
	Set stream = Nothing
	ReadBinary = node.Text
	Set node = Nothing
	Set xmldom = Nothing
End Function

函数的参数是要读取的文件路径,返回值是包含二进制文件的十六进制值的字符串。

Sub WriteBinary(FileName, Buf)
	Const adTypeBinary = 1
	Const adSaveCreateOverWrite = 2
	Dim stream, xmldom, node
	Set xmldom = CreateObject("Microsoft.XMLDOM")
	Set node = xmldom.CreateElement("binary")
	node.DataType = "bin.hex"
	node.Text = Buf
	Set stream = CreateObject("ADODB.Stream")
	stream.Type = adTypeBinary
	stream.Open
	stream.write node.NodeTypedValue
	stream.saveToFile FileName, adSaveCreateOverWrite
	stream.Close
	Set stream = Nothing
	Set node = Nothing
	Set xmldom = Nothing
End Sub

第一个参数是要读入的文件路径,第二个参数是包含二进制文件的十六进制值的字符串。至于如何获得二进制文件的十六进制值,那方法就很多了,最简单的方法当然就是用fso对象将ReadBinary函数的返回值写到文本文件中去,然后Ctrl+C,Ctrl+V。其实用十六进制工具也很简单。

其他的就不多说了,看不懂的多看看MSDN参考文档。写了一个示例程序,里面包含了天空之城音乐的所有数据,双击后在同一文件夹生成天空之城的MP3文件并播放。

[download id=29]

赞赏

微信赞赏支付宝赞赏

随机文章:

  1. 用C语言屏蔽键盘和鼠标
  2. 用VBS精确计算100的阶乘
  3. VBS转EXE工具:VBScript2Exe
  4. VBS创建系统服务
  5. Unicode中的HANGZHOU NUMERAL

32 条评论 发表在“用VBS读写二进制文件的另一种方法”上

  1. zx0sl说道:

    文件过大时是否需要分段处理

  2. […] 那么正确的方法是什么呢?其实在《用VBS读写二进制文件的另一种方法》中出现过,使用 Msxml2.DOMDocument 对象: […]

  3. […] 2、用dom+adodb.stream实现二进制读写。首先用adodb.stream对象的loadfromfile方法从指定文件读取二进制数据赋值给binary类型的xml节点,用节点的text属性可以获得此二进制文件的二进制文本。(所有字母为小写)实例可以参考http://demon.tw/programming/vbs-binary-file-another.html。 通告目前不可用,你可以至底部留下评论。 本文链接地址: http://www.itrenlife.com/?p=498版权所有 © 转载时请以链接形式注明作者和原始出处! 上一篇:13部经典悬疑片 没有评论▼ 我来说两句 […]

  4. god4说道:

    I can not download the code:
    [download id=29]
    Can you tell me where i can download it?

  5. geyee说道:

    just test whether one can download the attachment。

  6. wp说道:

    非常感谢 完全可以用在按键精灵上!

留下回复