在Windows系统中,如何python脚本实现分割合并大二进制文件,方便上传

在Windows系统中,如何python脚本实现分割合并大二进制文件,方便上传,第1张

你可以看看numpy.fromfile()方法,也可以自己open一个文件,再read()一定字节实现。

前者是把整个原文件读入内存成为数组,再选择数组的一部分写入文件(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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12218596.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存