我使用资源编辑器添加了一个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等等.
你一个一个字节的写当然慢了,改为:
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 #iFileNum
暴风雨正解
Open lpFileName For Binary As #1
Put #1, , LoadResData(101, "CUSTOM")
Close #1
晕~~ 看这个:
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)
CreateFile函数还有一个地方(NULL 改成 0)要改一下,我是从我的SDK代码COPY过来改成VB的
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)