加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

VB文件分割与合并

发布时间:2020-12-17 08:00:21 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 'VB 实现大文件的分割与合并,引用 ADODB.Stream 提供一个过程:'要引用 Microsoft ActiveX Data Objects 2.5 Libary'或 Microsoft ActiveX Data Object

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

'VB 实现大文件的分割与合并,引用 ADODB.Stream 提供一个过程:
'要引用 Microsoft ActiveX Data Objects 2.5 Libary
'或 Microsoft ActiveX Data Objects 2.6 Libary
Public Sub StreamSplit(SourceFile As String,DestinationFile As String,ChunkSize As Long,Optional BufferSize As Long = 64# * 1024#,Optional ShowFinishMessage As Boolean)
'ChunkSize 为 BufferSize 的倍数
Dim adoStreamS As New ADODB.Stream
adoStreamS.Type = adTypeBinary
adoStreamS.Open
adoStreamS.LoadFromFile SourceFile
Dim lFileSize As Long
lFileSize = adoStreamS.Size
Dim i As Long
Dim adoStreamT As New ADODB.Stream
adoStreamT.Type = adTypeBinary
Do While lFileSize >= ChunkSize * BufferSize
   adoStreamT.Open
   adoStreamT.Write adoStreamS.Read(ChunkSize * BufferSize)
   adoStreamT.SaveToFile DestinationFile & "." & Format(i,"000"),IIf(Len(Trim(Dir(DestinationFile & "." & Format(i,"000")))) > 0,adSaveCreateOverWrite,adSaveCreateNotExist)
   adoStreamT.Close
   lFileSize = lFileSize - ChunkSize * BufferSize
   i = i + 1
Loop
If lFileSize > 0 Then
   adoStreamT.Open
   adoStreamT.Write adoStreamS.Read(lFileSize)
   adoStreamT.SaveToFile DestinationFile & "." & Format(i,adSaveCreateNotExist)
End If
If ShowFinishMessage Then
   MsgBox "Finished!"
End If
End Sub

Public Sub StreamRestore(SourceFile As String,Chunks As Long,Optional ShowFinishMessage As Boolean)
Dim lFileSize As Long
Dim adoStreamT As New ADODB.Stream
adoStreamT.Type = adTypeBinary
adoStreamT.Open
Dim adoStreamS As New ADODB.Stream
adoStreamS.Type = adTypeBinary
Dim i As Long
For i = 0 To Chunks - 1 'Chunks 块数
    adoStreamS.Open
    adoStreamS.LoadFromFile SourceFile & "." & Format(i,"000")
    adoStreamT.Write adoStreamS.Read
    adoStreamS.Close
Next i
adoStreamT.SaveToFile DestinationFile,IIf(Len(Trim(Dir(DestinationFile))) > 0,adSaveCreateNotExist)
If ShowFinishMessage Then
   MsgBox "Finished!"
End If
End Sub

'VB 实现大文件的分割与恢复,采用读写二进制数据的传统经典代码:
Public Sub FileSplit(SourceFile As String,Optional ShowFinishMessage As Boolean)
'ChunkSize 为 BufferSize 的倍数
Dim FileBuffer() As Byte
Dim FileNumberS As Long
Dim FileNumberT As Long
FileNumberS = FreeFile
Open SourceFile For Binary Access Read As #FileNumberS
Dim lFileLen As Long
lFileLen = FileLen(SourceFile)
FileNumberT = FreeFile
Dim i As Long
Dim j As Long
ReDim FileBuffer(1 To (BufferSize)) As Byte
Open DestinationFile & "." & Format(i,"000") For Binary Access Write As #FileNumberT
Do While lFileLen >= BufferSize
   Get #FileNumberS,FileBuffer
   If i = ChunkSize Then
      i = 0
      j = j + 1
      Close #FileNumberT
      FileNumberT = FreeFile
      Open DestinationFile & "." & Format(j,"000") For Binary Access Write As #FileNumberT
   End If
   i = i + 1
   Put #FileNumberT,FileBuffer
   lFileLen = lFileLen - BufferSize
Loop
If lFileLen > 0 Then
   ReDim FileBuffer(1 To lFileLen) As Byte
   Get #FileNumberS,FileBuffer
   Put #FileNumberT,FileBuffer
End If
Close #FileNumberT
If ShowFinishMessage Then
   MsgBox "Finished!"
End If
End Sub
Public Sub FileRestore(SourceFile As String,Optional ShowFinishMessage As Boolean)
Dim FileBuffer() As Byte
Dim FileNumberS As Long
Dim FileNumberT As Long
Dim i As Long
Dim lFileLen As Long
FileNumberT = FreeFile
Open DestinationFile For Binary Access Write As #FileNumberT
For i = 0 To Chunks - 1
    FileNumberS = FreeFile
    Open SourceFile & "." & Format(i,"000") For Binary Access Read As #FileNumberS
    lFileLen = FileLen(SourceFile & "." & Format(i,"000"))
    ReDim FileBuffer(1 To BufferSize) As Byte
    Do While lFileLen >= BufferSize
       Get #FileNumberS,FileBuffer
       Put #FileNumberT,FileBuffer
       lFileLen = lFileLen - BufferSize
    Loop
    If lFileLen > 0 Then
       ReDim FileBuffer(1 To lFileLen) As Byte
       Get #FileNumberS,FileBuffer
    End If
    Close #FileNumberS
Next i
Close #FileNumberT
If ShowFinishMessage Then
   MsgBox "Finished!"
End If
End Sub

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读