前者是把整个原文件读入内存成为数组,再选择数组的一部分写入文件(numpy.tofile())。后者是从原文件中读入一些字节,再把这些字节write到新文件中。
因此,方法并不难,基本上就是一个copy过程。
特别要注意的是,二进制文件是不存储任何格式信息的,所以,一定要弄清楚这个文件是如何产生的,因此,在分割文件时不要把一个数所对或灶应的字节给分开。比如二进制文件中是32bit数据,那么,就要4字节为一个单位,不能在分割时分出一衫兄扮个尘兄1字节或2字节来,否则数据就错了。
Option Explicit'-- 合并文件
'-- 将卜困之前分割出来的带弊罩 1.mp3 和 2.mp3 合并为 music_new.mp3
Private Sub cmdAddFile_Click()
Dim bytData() As Byte
bytData = ReadFile(App.Path &"\1.mp3")
Call WriteFile(App.Path &"\music_new.mp3", bytData)
bytData = ReadFile(App.Path &"\2.mp3")
Call WriteFile(App.Path &"\music_new.mp3", bytData, , False)
End Sub
'蠢闹-- 分割文件
'-- 示例将当前目录的 music.mp3 切割为 1.mp3(30000字节) 和 2.mp3(剩余部分)
Private Sub cmdCut_Click()
Dim bytData() As Byte
bytData = ReadFile(App.Path &"\music.mp3", 1, 30000)
Call WriteFile(App.Path &"\1.mp3", bytData)
bytData = ReadFile(App.Path &"\music.mp3", 30001)
Call WriteFile(App.Path &"\2.mp3", bytData)
End Sub
Private Function ReadFile(ByVal strFileName As String, Optional ByVal lngStartPos As Long = 1, Optional ByVal lngFileSize As Long = -1) As Byte()
Dim FilNum As Integer
FilNum = FreeFile
Open strFileName For Binary As #FilNum
If lngFileSize = -1 Then
ReDim ReadFile(LOF(FilNum) - lngStartPos)
Else
ReDim ReadFile(lngFileSize - 1)
End If
Get #FilNum, lngStartPos, ReadFile
Close #FilNum
End Function
Private Function WriteFile(ByVal strFileName As String, bytData() As Byte, Optional ByVal lngStartPos As Long = -1, Optional ByVal OverWrite As Boolean = True)
Dim FilNum As Integer
FilNum = FreeFile
If OverWrite = True And Dir(strFileName) <>"" Then
Kill strFileName
End If
Open strFileName For Binary As #FilNum
If lngStartPos = -1 Then
Put #FilNum, LOF(FilNum) + 1, bytData
Else
Put #FilNum, lngStartPos, bytData
End If
Close #FilNum
End Function
拆:Private Sub Command1_Click()
Dim arr() As Byte
Open "E:\aa.rar" For Binary As #1
ReDim arr(1 To Round(LOF(1) /裂团 2))
Get #1, , arr
Open "E:\aa1.rar" For Binary As #2
Put #2, , arr
Close #2
ReDim arr(1 To LOF(1) - Round(LOF(1) /巧埋 2))
Get #1, , arr
Open "E:\aa2.rar" For Binary As #2
Put #2, , arr
Close #2
Close #1
End Sub
合:
Private Sub Command2_Click()
Open "E:\aa00.rar" For Binary As #1
Dim arr() As Byte
Open "E:\aa1.rar" For Binary As #2
ReDim arr(1 To LOF(2))
Get #2, , arr
Put #1, , arr
Close #2
Open "E:\aa2.rar"肆宽橘 For Binary As #2
ReDim arr(1 To LOF(2))
Get #2, , arr
Put #1, , arr
Close #2
Close #1
End Sub
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)