将自定义资源中的文件释放出来(大文件)

本文详细介绍了如何使用Visual Basic获取自定义资源文件并实现文件下载进度条显示,包括资源读取、文件存取操作及进度更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

.....思路都有了,自己实现一下不就行了...汗.

把之前的模块小改一下,自己弄进度条吧.....

VB code

Option Explicit
'*************************************************************************
'**模 块 名:GetResFile
'**说    明:将自定义资源中的文件释放出来
'**创 建 人:嗷嗷叫的老马
'**描    述:紫水晶工作室 http://www.m5home.com
'**日    期:2007年5月24日
'**版    本:V3.0
'*************************************************************************

Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
     ByVal Destination As Long, _
     ByVal Source As Long, _
     ByVal Length As Long)

Public Function GetResFile(ByVal ResID As Long, ByVal FileName As String) As Boolean
    Dim bFile() As Byte, lFileLen As Double, bTmp() As Byte
    Dim I As Long
    Const lBlockLen As Long = 1048576           '默认一次1M长度
   
    GetResFile = False
   
    bFile = LoadResData(ResID, "CUSTOM")    '将自定义资源中资源读入数组
    lFileLen = UBound(bFile) + 1            '自定义资源的字节数
   
    If Dir(FileName) = "" Then              '只有文件不存在时,才释放
        Open FileName For Binary As #1
            Do
                If I + lBlockLen < lFileLen Then
                    ReDim bTmp(lBlockLen - 1)
                    Call CopyMemory(VarPtr(bTmp(0)), VarPtr(bFile(I)), lBlockLen)
                    I = I + lBlockLen
                    Put #1, , bTmp()
                Else
                    ReDim bTmp(UBound(bFile) - I - 1)
                    Call CopyMemory(VarPtr(bTmp(0)), VarPtr(bFile(I)), lFileLen - 1 - I)
                    Put #1, , bTmp()
                End If
                Debug.Print (Seek(1) / lFileLen#) * 100# & "%"      '输出进度
                DoEvents
            Loop While Seek(1) < lFileLen
        Close #1
        GetResFile = True
    End If
End Function

 

 

 

 

________________________________________________________________________________________________

改成这样方法有点傻,但却不会损坏文件
VB code

Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
     ByVal Destination As Long, _
     ByVal Source As Long, _
     ByVal Length As Long)

Private Function GetResFile(ByVal ResID As Long, ByVal FileName As String) As Boolean
    Dim bFile() As Byte, lFileLen As Double, bTmp() As Byte
    Dim I As Long
    Const lBlockLen As Long = 1048576          '默认一次1M长度
   
    GetResFile = False
   
    bFile = LoadResData(ResID, "CUSTOM")    '将自定义资源中资源读入数组
    lFileLen = UBound(bFile)            '自定义资源的字节数
   
        Open FileName For Binary As #1
            Do
                If I + lBlockLen < lFileLen Then
                    ReDim bTmp(lBlockLen)
                    Call CopyMemory(VarPtr(bTmp(0)), VarPtr(bFile(I)), lBlockLen)
                    I = I + lBlockLen
                    Put #1, , bTmp()
                Else
                    ReDim bTmp(UBound(bFile) - I - 1)
                    Call CopyMemory(VarPtr(bTmp(0)), VarPtr(bFile(I)), lFileLen - 1 - I)
                    Put #1, , bTmp()
                End If
                ProgressBar1.Value = Format((Seek(1) / lFileLen) * 100, 0#)     '输出进度
                DoEvents
            Loop While Seek(1) < lFileLen
        Close #1
        I = 0
        Open FileName For Binary As #1
            Do
                If I + lBlockLen < lFileLen Then
                    ReDim bTmp(lBlockLen - 1)
                    Call CopyMemory(VarPtr(bTmp(0)), VarPtr(bFile(I)), lBlockLen)
                    I = I + lBlockLen
                    Put #1, , bTmp()
                Else
                    ReDim bTmp(UBound(bFile) - I - 1)
                    Call CopyMemory(VarPtr(bTmp(0)), VarPtr(bFile(I)), lFileLen - 1 - I)
                    Put #1, , bTmp()
                End If
                ProgressBar1.Value = Format((Seek(1) / lFileLen) * 100, 0#)     '输出进度
                DoEvents
            Loop While Seek(1) < lFileLen
        Close #1
        GetResFile = True
End Function
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值