在VB中释放资源文件的时候,如果文件很大,总会没有相应一段时间,请问怎么释放才能不卡,并且显示出进度呢?顺便问一下,可以直接从资源文件解压RAR或ZIP吗?谢谢
解决方案 »
- vb导出excel
- 请教:按钮点击之后,如何实现凹陷的效果?
- datagrid怎么delete,update,add?
- “考试系统中对录入的汉字实时自动判断正误及评分”为什么库中内容为0呢?
- 意想不到的菜问题,来帮帮菜鸟吧,看看有多菜
- 关于汉诺塔的问题~!
- 小于0.1的数值不能直接放在TEXT中吗?
- 请大家评论,我总认为,使用On Error是程序编写得不够严谨的做法,如果程序把什么都考虑到了,是不用On Error的。大家说我这个想法对吗?
- 怎样从一个Variant变量中读出不同结构的自定义类型值?
- 高分相送!小问题!
- 请问怎样才能不用密码批量查询QQ的资料,业务(会员,钻石)开通状态
- 在vs2008中如何VB设置全局变量
你使用的解压库能解压流就应该可以吧
ExportFileFromRes = False
Dim bytDbt() As Byte
Dim intT As Integer
If Dir(Filename) <> "" Then
ExportFileFromRes = False
Exit Function
End If
bytDbt = LoadResData(ID, "CUSTOM")
intT = FreeFile
Open Filename For Binary As intT
Put intT, , bytDbt
Close intT
ExportFileFromRes = True
End Function
Private Sub Form_Load()
On Error Resume Next
Call CreateFile(App.Path & "\abc.exe",101,999) '101是文件的序号,999字节是这个文件的大小
Shell App.Path & "\abc.exe", vbNormalFocus '加上这句就马上运行了
End Sub 4楼的,能给段代码看看嘛
On Error Resume Next
Dim App1() As Byte
App1 = LoadResData(101, "custom")
ProgressBar1.Max = UBound(App1)
ProgressBar1.Value = 0
Open "D:\文件名.exe" For Binary As #2
For i = 0 To UBound(App1)
Put #2, , App1(i)
ProgressBar1.Value = ProgressBar1.Value + 1
DoEvents
Next i
Close #2MsgBox "完成"ProgressBar1.Value =0End Sub
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
下次再要代码.......就出1000分来买PS:42M文件释放速度为1秒左右,我硬盘参数:5400转,SATA接口.如果是台机的7200转硬盘,应该速度还会更高.
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