只爱陌生人 2006-3-26 17:06
如何提高二进制文件读取的速度
我想做一个简单的文件分割合并软件,但是当我在读取一些比较大的文件的时候,就发现内存被耗尽了.代码如下,
Dim n As Long
Dim arrBytes() As Byte
Open Text1.Text For Binary As 1 'text1里是文件路径
n = LOF(1)
ReDim arrBytes(1 To n) As Byte
Open Text1.Text & ".jsh" For Binary As 2 'text1.text & ".jsh" 用于保存已分割的文件
Get 1, , arrBytes
For i = 1 To UBound(arrBytes)
Text2.Text = Text2.Text & CStr(arrBytes(i))
Next
Put 2, , arrBytes
Close 1, 2
请问实现这样的功能,用二进制文件方式打开应该可以的吧.那么,又如何提高分割的速度并且占用较少的内存呢?vb 里有没有文件流之类的?通道是什么意思??
谢谢!
Nothing 2006-3-26 20:58
你的程序有问题,不知道你为什么要把二进制的文件显示在文本里,这是你占用内存的主要问题,与文件操作无关。
如何非要使用文本,请用下面的方法
Text2.SelText =arrBytes
不要再使用循环了,这个代码就能搞定。
只爱陌生人 2006-3-27 21:14
多谢管理员。
果然在不使用循环结构之后,速度就提高了。获益匪浅呀,多谢多谢!
只爱陌生人 2006-3-30 10:22
不好意思,又遇 到新问题了。我用以下的方法来读文件:
Dim part As Integer ‘分割份数
Dim filelens As Long ’源文件大小
part = Val(txtpart.Text)
Dim temp() As Byte ‘存放读取的数据
filelens = FileLen(txtsoc1.Text)
Open txtsoc1.Text For Binary Access Read As 10
ReDim temp(filelens \ part) As Byte
For i = 1 To part
Open txtobj1.Text & i For Binary As i
Get 10, Seek(10), temp
Put i, Seek(i), temp
Close i
Next
Close 10
用以下的方法写文件(也就是把已经分割的文件还原):
Dim arr() As Byte
Dim filelens As Long
Dim totalpart As Integer ’要还原的文件总数
Dim filepath As String
totalpart = Val(texttotal.Text)
Open Text2.Text For Binary As 10 '目标文件
For i = 1 To totalpart
filepath = Text2.Text & ".jsh" & i
filelens = FileLen(filepath)
ReDim arr(filelens) As Byte
Open Text2.Text & ".jsh" & i For Binary As i
Get i, Seek(i), arr
Put 10, Seek(10), arr
Close i
Next
Close 10
用以上的方法来分割还原文件文件还是能运行正确,但是分割还原视频文件之后,还原之后的文件在播放了一部分时总是提示文件已经损坏。这是怎么回事呢,是不是有什么数据丢失或重复了??也许是在重写入文件的时候,记录位置错了吧???
再次请教!谢谢
[[i] 本帖最后由 只爱陌生人 于 2006-3-30 10:36 编辑 [/i]]
Nothing 2006-3-30 10:47
Get i, Seek(i), arr
Put 10, Seek(10), arr ‘问题出在这里
改成下面的试试,你的代码就是每次都从当前位置开始写,你可以比较文件的大小,看看问题出在了哪里
Get i, , arr
Put 10, ,arr
只爱陌生人 2006-3-31 19:35
如果只分割一次的话,所有我测试的文件格式都能正确地分割并还原.
但是,对于分割形成的文件,(*.jsh)再分割再还原之后,再还原成原来最初的文件时就出现问题了.(在分割还原*.rar的时候发现这个问题).当然,对分割形成的文件再分割没有实在的意义,只是检验到了数据的不完整而已.
看来还是有数据丢失呀!我以前想得实在是太简单了.