读书人

关于VB二进文件读取的有关问题

发布时间: 2012-01-19 20:57:58 作者: rapoo

关于VB二进文件读取的问题
有一个程序,想改掉内部的一点东西,重新生成一个新的程序

先要读取出资源文件1的全部数据,然后查找出资源文件1特征a.a.a.a并替换成b.b.b.b然后重新生成一个新文件,a.a.a.a的位置不定,但一定有这个特征!求各位帮帮忙,想了一个下午!

[解决办法]
Option Explicit

'功能:以字节方式替换文件内容后输出
'参数:源文件名,输出文件名,查找内容,替换内容
'注意:替换内容是区分大小写的
' 可以处理任何类型文件,但如果处理的是可执行类二进制文件
' 有可能造成破坏而不能正常运行
'
'调用示例:
' 将文件 abc.txt 中的 "AB " 字符全部替换为 "12 "
' ByteReplace "c:\abc.txt ", "c:\abc2.txt ", "AB ", "12 "
'
'代码编写:阿勇 fxy_2002@163.com
'日期:2007/07/04
'
Sub ByteReplace(ByVal sFile As String, ByVal oFile As String, fStr As String, rStr As String)

Dim fByte() As Byte
Dim fStrByte() As Byte, rStrByte() As Byte

fStrByte = StrConv(fStr, vbFromUnicode)
rStrByte = StrConv(rStr, vbFromUnicode)

Dim l As Long
l = UBound(fStrByte) + 1

If l <> UBound(rStrByte) + 1 Then Exit Sub '替换内容与被替换内容不等长,退出

Dim f As Integer
Dim fl As Long

f = FreeFile()

Open sFile For Binary As #f

fl = LOF(f)
ReDim fByte(fl - 1)

Get #f, , fByte
Close #f

Dim i As Long, j As Long
Dim b As Boolean

For i = 0 To (fl - 1) - (l - 1) '遍历整个文件字节数组
If fByte(i) = fStrByte(0) Then '如果与第一个字节匹配,进入循环比较后续字节。
'否则,从下一个字节开始重新匹配
b = True
For j = 1 To (l - 1)
If fByte(i + j) <> fStrByte(j) Then
b = False
Exit For
End If
Next
If b Then '全部字节匹配,替换内容
For j = i To i + (l - 1)
fByte(j) = rStrByte(j - i)
Next
i = i + (l - 1) '替换内容后,当前指针跳过已替换之内容,处理下一个匹配项
End If
End If
Next

f = FreeFile()
Open oFile For Binary As #f
Put #f, , fByte
Close #f

Erase fByte
Erase fStrByte
Erase rStrByte

End Sub


读书人网 >VB

热点推荐