VB 实现大文件的分割与恢复,引用 ADODB.Stream 提供一个过程代码

原创 2001年05月06日 01:51:00

'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, "000"), IIf(Len(Trim(Dir(DestinationFile & "." & Format(i, "000")))) > 0, adSaveCreateOverWrite, adSaveCreateNotExist)
End If
If ShowFinishMessage Then
   MsgBox "Finished!"
End If
End Sub

 

Public Sub StreamRestore(SourceFile As String, DestinationFile As String, Chunks As Long, Optional BufferSize As Long = 64# * 1024#, 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, adSaveCreateOverWrite, adSaveCreateNotExist)
If ShowFinishMessage Then
   MsgBox "Finished!"
End If
End Sub

'VB 实现大文件的分割与恢复,采用读写二进制数据的传统经典代码:
Public Sub FileSplit(SourceFile As String, DestinationFile As String, ChunkSize As Long, Optional BufferSize As Long = 64# * 1024#, 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, DestinationFile As String, Chunks As Long, Optional BufferSize As Long = 64# * 1024#, 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
       Put #FileNumberT, , FileBuffer
    End If
    Close #FileNumberS
Next i
Close #FileNumberT
If ShowFinishMessage Then
   MsgBox "Finished!"
End If
End Sub

VB 实现大文件的分割与恢复,引用 ADODB.Stream 提供一个过程

VB 实现大文件的分割与恢复,引用 ADODB.Stream 提供一个过程: ´要引用 Microsoft ActiveX Data Objects 2.5 Libary ´或 Microsoft A...
  • eqiang8271
  • eqiang8271
  • 2008年05月19日 17:30
  • 1180

利用Adodb.Stream直接下载文件

在浏览器的地址栏里直接输入一个doc或xls或jpg的文件的url路径,那么该文件会直接显示在浏览器里。而在很多时候我们希望能直接弹出下载提示框让用户下载,我们该怎么办呢?这里有两种方法:1、设置你的...
  • yxtyxt3311
  • yxtyxt3311
  • 2005年09月27日 12:56
  • 942

JS/VBS配合Adodb.Stream处理字节数据/输出二进制文件

一开始,我曾想到将字节数据转换为JS字符串,每两个字节一组转换为一个字节,然后写入模式为文本、编码为“Unicode”的Adodb.Stream对象。这样做有下面这些问题,但各有方法解决:首先,将字节...
  • CaiKanXP
  • CaiKanXP
  • 2010年06月30日 14:25
  • 5998

Java大文件的分割和合并

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import...
  • qq377751971
  • qq377751971
  • 2017年03月20日 14:25
  • 173

C#中实现VB中的CreateObject方法.

文章来源:http://www.cnblogs.com/phytan/archive/2007/07/11/814175.html    经常看到有些VB的例子中直接用个CreateObject就可调...
  • daiafei
  • daiafei
  • 2009年11月26日 17:35
  • 1021

VBS之adodb.stream对象的方法/属性

adodb.stream对象的方法/属性 Cancel 方法 使用方法如下 Object.Cancel 说明:取消执行挂起的异步 Execute 或 Open 方法的调用。 C...
  • icanlove
  • icanlove
  • 2014年09月19日 10:21
  • 9669

[VBA]读取文件常用的方法(ADODB.recordSet|ADODB.stream)(大文件读取&指定encode)

'#####serach big file (ADODB.Recordset) →it is fast##### Sub searchLineFromText()   Dim CN As AD...
  • Slowly_Lin
  • Slowly_Lin
  • 2016年03月13日 23:19
  • 312

VB 写的文件分割工具,还蛮好用的。附上源码

VERSION 5.00Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "Comdlg32.ocx"Begin VB.Form frm...
  • lbuskeep
  • lbuskeep
  • 2011年02月06日 19:55
  • 1894

大文件拆分方案的java实践

目   正文 1. 引子 大文件拆分问题涉及到io处理、并发编程、生产者/消费者模式的理解,是一个很好的综合应用场景,为此,花点时间做一些实践,对相关的知识做一次梳理和集成,总结一...
  • huangyun_1314
  • huangyun_1314
  • 2017年07月30日 11:47
  • 403

ADODB.Stream的使用说明

Adodb.Stream是ADO的Stream对象,提供存取二进制数据或者文本流,从而实现对流的读、写和管理等操作. (原作者不详,此为转述。)有下列方法:Cancel 方法使用方法如下Object....
  • wwwdbs
  • wwwdbs
  • 2009年08月04日 15:11
  • 3670
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VB 实现大文件的分割与恢复,引用 ADODB.Stream 提供一个过程代码
举报原因:
原因补充:

(最多只允许输入30个字)