VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: nicholaseen

[求助] VB6调用API fileopen无法获取大文件句柄的问题

[复制链接]
 楼主| 发表于 2015-2-6 12:29:05 | 显示全部楼层
babytony 发表于 2015-2-3 20:51
在很久很久以前,openfile是用于windows 16位的,那时候4M内存是标配,那时候我们学校的硬盘是32M。。。。。 ...

谢谢了,学习了,
最近在写一个复制大文件,不卡死,可以断点续传的小程序,
用了openfile,readfile,writefile和SetFilePointer,倒是忽略了用createfile,测试下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-6 12:30:14 | 显示全部楼层
学习了,
最近在写一个复制大文件,不卡死,可以断点续传的小程序,
用了openfile,readfile,writefile和SetFilePointer,倒是忽略了用createfile,测试下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-7 17:01:29 | 显示全部楼层
startbin321 发表于 2015-2-3 10:37
当然应该用createfileW

断点拷备程序
求助贴子地址:http://www.vbgood.com/thread-141143-1-1.html
1.把openfile改为createfile后,发现仍然读取不了>3G的文件
2.读取速度保持在5.5M/秒,这个和WINDOWS复制的速度相比太慢,
求解
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-7 17:02:20 | 显示全部楼层
wwswwswws 发表于 2015-2-3 11:08
2楼正解,大于2G的文件,openfile是不对的

断点拷备程序
求助贴子地址:http://www.vbgood.com/thread-141143-1-1.html
1.把openfile改为createfile后,发现仍然读取不了>3G的文件
2.读取速度保持在5.5M/秒,这个和WINDOWS复制的速度相比太慢,
求解
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-7 17:03:03 | 显示全部楼层
bxc1995 发表于 2015-2-3 14:47
win32下,使用CreateFile打开文件.

断点拷备程序
求助贴子地址:http://www.vbgood.com/thread-141143-1-1.html
1.把openfile改为createfile后,发现仍然读取不了>3G的文件
2.读取速度保持在5.5M/秒,这个和WINDOWS复制的速度相比太慢,
求解
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-7 17:03:27 | 显示全部楼层
babytony 发表于 2015-2-3 20:51
在很久很久以前,openfile是用于windows 16位的,那时候4M内存是标配,那时候我们学校的硬盘是32M。。。。。 ...

断点拷备程序
求助贴子地址:http://www.vbgood.com/thread-141143-1-1.html
1.把openfile改为createfile后,发现仍然读取不了>3G的文件
2.读取速度保持在5.5M/秒,这个和WINDOWS复制的速度相比太慢,
求解
回复 支持 反对

使用道具 举报

发表于 2015-2-7 18:45:28 | 显示全部楼层
nicholaseen 发表于 2015-2-7 17:03
断点拷备程序
求助贴子地址:http://www.vbgood.com/thread-141143-1-1.html
1.把openfile改为createfil ...

用什么API读取的,为何读取不了,LastError何值?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-7 21:51:56 | 显示全部楼层
bxc1995 发表于 2015-2-7 18:45
用什么API读取的,为何读取不了,LastError何值?

大致思路和代码是这样的
    Dim lngFrom     As Long   
    Dim lngTo       As Long
    Const c_BufSize As Long = 8 * 1024
    lngFrom = CreateFile(srcfilename, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or  FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)      '获取源文件句柄
    lngTo = CreateFile(destFilename, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_ALWAYS, 0, 0)     '创建目标文件
   do       '循环读取和写入
           ReadFile lngFrom, VarPtr(buf(0)), c_BufSize, lngCopy, 0
           WriteFile lngTo, VarPtr(buf(0)), lngCopy, lngCopy, 0
   loop
而断点续传则使用了 API  SetFilePointer 函数
发现以下几个问题:
1.把openfile改为createfile后,发现仍然读取不了>3G的文件
2.读取速度保持在5M/秒,这个和WINDOWS复制的速度相比太慢,
求解
回复 支持 反对

使用道具 举报

发表于 2015-2-8 00:00:04 | 显示全部楼层
nicholaseen 发表于 2015-2-7 21:51
大致思路和代码是这样的
    Dim lngFrom     As Long   
    Dim lngTo       As Long

具体的不太清楚.
看你的操作就是要复制文件,为何不直接CopyFile.

点评

这个是带进度条的,用COPYFILE明显不合适  发表于 2015-2-8 13:54
回复 支持 反对

使用道具 举报

发表于 2015-2-8 14:26:27 | 显示全部楼层
那可以考虑使用CopyFileEx函数.
https://msdn.microsoft.com/en-us/library/aa363852.aspx
  1. BOOL WINAPI CopyFileEx(
  2.   _In_      LPCTSTR lpExistingFileName,
  3.   _In_      LPCTSTR lpNewFileName,
  4.   _In_opt_  LPPROGRESS_ROUTINE lpProgressRoutine,
  5.   _In_opt_  LPVOID lpData,
  6.   _In_opt_  LPBOOL pbCancel,
  7.   _In_      DWORD dwCopyFlags
  8. );
复制代码
看看这个lpProgressRoutine参数.

点评

http://www.vbgood.com/thread-141154-1-1.html 新贴地址,一个是要复制大文件,二是复制过程中不能卡,三是复制速度,四是指示进度条,五是断点传  发表于 2015-2-8 14:48
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-1 19:50

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表