[求助]如果将自定义资源中的文件快速的写入一个文件中

leady27 2005-12-04 09:42:15
我使用资源编辑器添加了一个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等等.
...全文
203 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
leady27 2005-12-05
  • 打赏
  • 举报
回复
嗯。。太感谢了,原来我还笨笨的一人字节一个字节的去读,怪不得要花怎么多时间呢!
风里有梦 2005-12-05
  • 打赏
  • 举报
回复
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)
风里有梦 2005-12-05
  • 打赏
  • 举报
回复
CreateFile函数还有一个地方(NULL 改成 0)要改一下,我是从我的SDK代码COPY过来改成VB的
风里有梦 2005-12-05
  • 打赏
  • 举报
回复
晕~~ 看这个:

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)
northwolves 2005-12-05
  • 打赏
  • 举报
回复
暴风雨正解

Open lpFileName For Binary As #1
Put #1, , LoadResData(101, "CUSTOM")
Close #1
rainstormmaster 2005-12-04
  • 打赏
  • 举报
回复
你一个一个字节的写当然慢了,改为:
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

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧