前者是把整个原文件读入内存成为数组,再选择数组的一部分写入文件(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
可以使用 powershell 代码:(get-content -encoding byte '原始文件.txt ')[0][10..50] | set-content -encoding byte '输出文件.txt'
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)