我想做一个简单的文件分割合并软件,但是当我在读取一些比较大的文件的时候,就发现内存被耗尽了.代码如下,
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
不好意思,又遇 到新问题了。我用以下的方法来读文件:
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
用以上的方法来分割还原文件文件还是能运行正确,但是分割还原视频文件之后,还原之后的文件在播放了一部分时总是提示文件已经损坏。这是怎么回事呢,是不是有什么数据丢失或重复了??也许是在重写入文件的时候,记录位置错了吧???
再次请教!谢谢
Get i, Seek(i), arr
Put 10, Seek(10), arr ‘问题出在这里
改成下面的试试,你的代码就是每次都从当前位置开始写,你可以比较文件的大小,看看问题出在了哪里
Get i, , arr
Put 10, ,arr 作者:
只爱陌生人 时间: 2006-3-31 19:35