Board logo

标题: 如何提高二进制文件读取的速度 [打印本页]

作者: 只爱陌生人    时间: 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

多谢管理员。
果然在不使用循环结构之后,速度就提高了。获益匪浅呀,多谢多谢!
作者: Nothing    时间: 2006-3-27 21:35

不必客气
作者: 只爱陌生人    时间: 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
用以上的方法来分割还原文件文件还是能运行正确,但是分割还原视频文件之后,还原之后的文件在播放了一部分时总是提示文件已经损坏。这是怎么回事呢,是不是有什么数据丢失或重复了??也许是在重写入文件的时候,记录位置错了吧???
再次请教!谢谢

[ 本帖最后由 只爱陌生人 于 2006-3-30 10:36 编辑 ]
作者: 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的时候发现这个问题).当然,对分割形成的文件再分割没有实在的意义,只是检验到了数据的不完整而已.
     看来还是有数据丢失呀!我以前想得实在是太简单了.




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0