vb 二进制文件的读写

求以下程序代码
已知a.exe,做程序c.exe使其单独能生成a.exe(不借助任何储存a.exe的文件)
我想可以先读取a.exe的内容,作为常量保存,但生成出来的a.exe无法运行。

第1个回答  2008-12-02
单击菜单“外接程序”“外接程序管理器...”,选择“VB 6 资源编辑器”,选中窗口右下部分“加载行为”的“加载/卸载”的复选框,单击“确定”
(如果找不到“VB 6 资源编辑器”,那么你的VB软件可能没这个功能,最好换一个VB软件试试)
单击工具栏上的"VB资源编辑器"按钮(由一堆绿色方块组成的那个图标),这时打开"VB资源编辑器"窗口
单击"添加自定义资源..."按钮(从右边数第二个),选择a.exe,打开
单击"保存"按钮,保存文件后(假设保存为"工程1.RES"),就可以关闭"VB资源编辑器"窗口了,这时工程资源管理器中有一个"相关文档",展开后就能看到"工程1.RES"
在Form_Load()中添加以下代码
Dim arr() As Byte
arr = LoadResData(101, "CUSTOM")
Open App.Path & "\a.exe" For Binary As #1
Put #1, , arr
Close #1
生成程序c.exe,运行后就在c.exe所在的文件夹中产生文件a.exe
直接运行(不生成exe)也可以产生文件a.exe本回答被提问者采纳
第2个回答  2020-06-27
用二进制法打开一个新的文件,然后依次二进制法读入四个文件,输出写在一起就行了
第3个回答  2020-02-29
Get
#
<文件号>,<字节数>,<变量名>
Put
#
<文件号>,<字节数>,<变量名>
第4个回答  2008-11-29
不借助任何储存a.exe的文件,能实现你的要求吗?
第5个回答  2019-03-26
二进制文件的操作
所有文件的存储其实质都是二进制的,二进制文件往往由两部分组成,一部分是文件头另一部分存放了文件的内容。文件头通常存放与文件格式有关的信息,以BMP等图象文件为例,它们的文件头中存放了是何种图形格式、图象大小、调色板等信息,要显示图象时先读取文件头以获得文件的详细信息,然后再按其格式把图象内容显示出来。用二进制方式可以操作任何的文件,当然至关重要的一点是要清楚了解所操作文件的文件头结构。
VB中二进制文件操作主要应用的方法和函数有:Open,Close,Get,Put等。
Open:在For后面的打开模式要用Binary。
Close:关闭文件。
Get:在指定位置取得文件的内容,如果省略位置则从当前位置读取。
Put:在指定位置写入文件,如果省略位置参数就从当前位置写。
下面结合代码讲解二进制文件的操作。
下述程序完成了将两个文件结合成一个文件以及将这个结合后的文件再拆分成原来的两个文件。文件头的结构是自己定义的,非常简单,共8个字节(也就是两个长整型的长度),前4个字节存放第一个文件的长度,后4个字节存放第二个文件的长度。为了更直观地表达文件的结构,现假设有两个文件,第一个文件长度是100字节,第二个文件是200字节,那么合并后得到的文件应该是308字节。按顺序来看,文件的结构是:
4第一文件的长度
4第二文件的长度
100第一文件的二进制内容
200第二文件的二进制内容
除了文件头的8字节长度是固定的后面的长度都会因文件的不同而变化的。
‘实现文件的合并
Private
Sub
MergeFile()
Dim
strFileName1
As
String
'第一个文件
Dim
strFileName2
As
String
'第二个文件
Dim
strOutput
As
String
'合并后的文件
Dim
aryContent()
As
Byte
'用来读取文件的数组,每次读取前要重定义
strFileName1
=
"c:\a.bmp"
strFileName2
=
"c:\b.bmp"
strOutput
=
"c:\out.bmp"
'注意下面三个Open语句都是用Binary模式打开的
Open
strOutput
For
Binary
As
#100
Open
strFileName1
For
Binary
As
#1
Open
strFileName2
For
Binary
As
#2
Put
#100,
,
LOF(1)
'取得第一文件的长度,并把它写入到合并文件的文件头中
Put
#100,
,
LOF(2)
'取得第二文件的长度,并写入到合并文件的文件头中
ReDim
aryContent(LOF(1)
-
1)
'重定义数组,为读取文件做准备
Get
#1,
,
aryContent()
'取得第一文件的内容到数组
Put
#100,
,
aryContent()
'把第一文件的内容写到合并文件中
ReDim
aryContent(LOF(2)
-
1)
Get
#2,
,
aryContent()
Put
#100,
,
aryContent()
'关闭文件
Close
#1
Close
#2
Close
#100
End
Sub
‘实现文件的拆分
Private
Sub
SplitFile()
Dim
strFileName1
As
String
Dim
strFileName2
As
String
Dim
strFileSplit
As
String
Dim
aryContent()
As
Byte
Dim
lngLOF(1)
As
Long
'存放从文件头取得的两个文件的长度
strFileName1
=
"c:\a2.bmp"
strFileName2
=
"c:\b2.bmp"
strFileSplit
=
"c:\out.bmp"
Open
strFileSplit
For
Binary
As
#100
Get
#100,
,
lngLOF(0)
'取得第一文件的长度
Get
#100,
,
lngLOF(1)
'第二文件的长度
Open
strFileName1
For
Binary
As
#1
Open
strFileName2
For
Binary
As
#2
ReDim
aryContent(lngLOF(0)-1)
'用第一文件的长度重定义数组,为读取第一文件做准备
Get
#100,
9,
aryContent()
'从第9字节,即文件后面开始读取第一文件的内容
Put
#1,
,
aryContent()
'把取得的内容写入到拆分文件中
ReDim
aryContent(lngLOF(1)-1)
Get
#100,
9
+
lngLOF(0)
+
1,
aryContent()
'从第9字节再加上第一文件的长度处开始读取第二文件的内容,这里可以清楚地看到文件头的作用了
Put
#2,
,
aryContent
Close
#1
Close
#2
Close
#100
MsgBox
"拆分完成。",
vbInformation
文本文件由于没有格式所以它的读写都比较简单和直观,而用二进制操作文件时其实质就是对文件头的理解,如果不知道文件头的结构那就无法对文件进行处理了,知道了文件头所包含的信息后,对文件的操作其实就是按规则进行Get、Put罢了。