'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 aeecss adodb resouse recordset
使用vbs读写文件(Adodb.Stream)方式,防止乱码
adodb.stream 模仿sina的天气预报
Adodb.Stream是ADO的Stream对象,提供存取二进制数据或者文本流,从而实现对流的读、写和管理等操作及各种方法的使用。 http://www.abo518.cn
adodb.stream
卸载/恢复ADODB.Stream的软件
VB实现大文件的分割与合并 1)引用 ADODB.Stream 2)采用读写二进制数据的传统经典代码
主要介绍了adodb.recordset.open(rs.open)方法参数详解,需要的朋友可以参考下
ADODB.Stream组件Charset属性值集合
代码如下:‘函数名称:ReadTextFile ‘作用:利用AdoDb.Stream对象来读取UTF-8格式的文本文件 ‘—————————————————- Function ReadFromTextFile (FileUrl,CharSet) If FileUrl = “” OR Is...
用ADODB.Stream转换
Adodb.Stream 这种方式 电脑还好说,大部分电脑浏览器都支持。移动端 很多 浏览器为了 加速读取,会多线程下载导致 文件无法正常读取。 抓包,发现增加了 HTTP头 HTTP_RANGE。隐约记得 之前读过 王大(王洪影)的 ...
asp adodb.stream对象的方法/属性
asp之基于adodb.stream的文件操作类
用 XMLDOM 和 ADODB.Stream 实现base64编码解码 </title> <meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″> <style type=”text/css” title=””> #textarea1,#...
在ASP中,我们常用Scripting.FileSystemObject组件来读写文本文件,但它有一个缺点是对编码支持不足,比如我们想读写一个utf-8文本文件,FSO就很难办到了,这时我们就需要使用Adodb.Stream组件来代替它。
用adodb.stream读取文件并保存为数组的实现代码
其实说来也简单,就是把编码换一下,使用437,这个是IBM扩展过的ASCII编码,把ASCII编码的最高位也利用起来,将字符集中的字符从128个扩展到256个,而使用这个字符集读取的字符数据就相当于原始二进制数据了。...
<%...‘—————利用xmlhttp和adodb.stream—————–‘On Error Resume Next‘——————————-定义输出格式—————————–path=request(“path”)if path =”” thenpath=”...