| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 编程开发 > VB教程 > 文章正文 用户登录
轻松实现博客介绍
企业网站如何实现
在FLAHS中实现LRC
flash动态读取xml
实现在Flash课件中
ASP.NET中实现Fla
flash中实现js的图
数据结构队列的实
flashcom聊天对话
MC和对象数据类型

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

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

作者:佚名 来源:csdn 更新:2006-8-25 21:05:35 错误报告 我要投稿
 

'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

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。