我使用资源编辑器添加了一个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 ByteDim lpFileSize As Long, i As LongDim iFileNum As LongiFileNum = FreeFilelpFileTemp = LoadResData(101, "CUSTOM")Open lpFileName For Binary As #iFileNumPut #iFileNum, , lpFileTempClose #iFileNum
暴风雨正解
Open lpFileName For Binary As #1Put #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)