[求助]如果将自定义资源中的文件快速的写入一个文件中
我使用资源编辑器添加了一个2.81MB的文件的自定义资源,然后使用以下的代码将其写入一个文件中,只不过,速度实在是太慢了(如果该自定义资源的比较小,速度就比较快).
Dim lpFileTemp() As Byte
Dim lpFileSize As Long, i As Long
Dim iFileNum As Long
iFileNum = FreeFile
lpFileTemp = LoadResData(101, "CUSTOM")
lpFileSize = UBound(lpFileTemp) - 1
Open lpFileName For Binary As #iFileNum
For i = 0 To lpFileSize
Put #iFileNum, , lpFileTemp(i)
DoEvents
Next i
Close #iFileNum
我想,多数人将自定义资源中的内容写成文件的形式,一般是使用以上类似的代码吧..
是否有没有速度更快的方式.通过某个API等等.
问题点数:70、回复次数:6Top
1 楼rainstormmaster(暴风雨 v2.0)回复于 2005-12-04 23:08:46 得分 30
你一个一个字节的写当然慢了,改为:
Dim lpFileTemp() As Byte
Dim lpFileSize As Long, i As Long
Dim iFileNum As Long
iFileNum = FreeFile
lpFileTemp = LoadResData(101, "CUSTOM")
Open lpFileName For Binary As #iFileNum
Put #iFileNum, , lpFileTemp
Close #iFileNumTop
2 楼northwolves(狼行天下)回复于 2005-12-05 01:09:52 得分 5
暴风雨正解
Open lpFileName For Binary As #1
Put #1, , LoadResData(101, "CUSTOM")
Close #1
Top
3 楼baofeng(自古以来)回复于 2005-12-05 01:19:13 得分 35
晕~~ 看这个:
Dim pFileBuffer() As Byte
Dim nFileSize As Long
Dim hFile as long
dim dwBytesWritten as long
dim nReturn as long
pFileBuffer = LoadResData(101, "CUSTOM")
nFileSize = UBound(pFileBuffer) - 1
hFile = CreateFile( pszFileName,
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN,
0
)
if ( hFile = INVALID_HANDLE_VALUE )
exit function
if ( WriteFile(hFile, pFileBuffer(0), nFileSize, dwBytesWritten, 0) <> 0 )
call FlushFileBuffers(hFile)
'// 关闭文件句柄
call CloseHandle(hFile)Top
4 楼baofeng(自古以来)回复于 2005-12-05 01:20:34 得分 0
CreateFile函数还有一个地方(NULL 改成 0)要改一下,我是从我的SDK代码COPY过来改成VB的Top
5 楼baofeng(自古以来)回复于 2005-12-05 01:28:50 得分 0
pFileBuffer = LoadResData(101, "CUSTOM")
nFileSize = UBound(pFileBuffer) - 1
这两行也可改成直接API方式:
dim hResInfo as long
dim hMem as long
dim pBuffer as long
hResInfo = FindResource(app.hinstance, 101, RT_RCDATA)
hMem = LoadResource(app.hinstance, hResInfo)
nFileSize = SizeofResource(app.hinstance, hResInfo)
pBuffer = LockResource(hMem)
'创建文件句柄....
'写到磁盘中...
if ( WriteFile(hFile, byval pBuffer, nFileSize, dwBytesWritten, 0) <> 0 )
call FlushFileBuffers(hFile)
'关闭文件句柄...
'释放内存对象句柄
FreeResource(hMem)Top
6 楼leady27(冰冻)回复于 2005-12-05 19:28:37 得分 0
嗯。。太感谢了,原来我还笨笨的一人字节一个字节的去读,怪不得要花怎么多时间呢!Top




