CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

关于用VB拷贝文件?

楼主jhtzz(执著男孩)2004-12-02 16:56:35 在 VB / API 提问

有什么方法可以提高windows拷贝文件的速度,有现在的方案:  
  1,用如下API  
  Private   Declare   Function   OpenFile   Lib   "kernel32"   (ByVal   lpFileName   As   String,   lpReOpenBuff   As   OFSTRUCT,   ByVal   wStyle   As   Long)   As   Long  
  Private   Declare   Function   DeleteFile   Lib   "kernel32"   Alias   "DeleteFileA"   (ByVal   lpFileName   As   String)   As   Long  
  'Private   Declare   Function   CreateFile   Lib   "kernel32"   Alias   "CreateFileA"   (ByVal   lpFileName   As   String,   ByVal   dwDesiredAccess   As   Long,   ByVal   dwShareMode   As   Long,   lpSecurityAttributes   As   SECURITY_ATTRIBUTES,   ByVal   dwCreationDisposition   As   Long,   ByVal   dwFlagsAndAttributes   As   Long,   ByVal   hTemplateFile   As   Long)   As   Long  
  Private   Declare   Function   SetFilePointer   Lib   "kernel32"   (ByVal   hFile   As   Long,   ByVal   lDistanceToMove   As   Long,   ByVal   lpDistanceToMoveHigh   As   Long,   ByVal   dwMoveMethod   As   Long)   As   Long  
  Private   Declare   Function   WriteFile   Lib   "kernel32"   (ByVal   hFile   As   Long,   ByVal   lpBuffer   As   Long,   ByVal   nNumberOfBytesToWrite   As   Long,   lpNumberOfBytesWritten   As   Long,   ByVal   lpOverlapped   As   Long)   As   Long  
  Private   Declare   Function   ReadFile   Lib   "kernel32"   (ByVal   hFile   As   Long,   ByVal   lpBuffer   As   Long,   ByVal   nNumberOfBytesToRead   As   Long,   lpNumberOfBytesRead   As   Long,   ByVal   lpOverlapped   As   Long)   As   Long  
  Private   Declare   Function   CloseHandle   Lib   "kernel32"   (ByVal   hObject   As   Long)   As   Long  
  Private   Declare   Function   GetLastError   Lib   "kernel32"   ()   As   Long  
  Private   Declare   Function   SetEndOfFile   Lib   "kernel32"   (ByVal   hFile   As   Long)   As   Long  
   
  2,用  
  Declare   Function   CopyFile   Lib   "kernel32"   Alias   "CopyFileA"   (ByVal   lpExistingFileName   As   String,   ByVal   lpNewFileName   As   String,   ByVal   bFailIfExists   As   Long)   As   Long  
   
  3,用Declare   Function   SHFileOperation   Lib   "shell32.dll"   Alias   "SHFileOperationA"   (lpFileOp   As   SHFILEOPSTRUCT)   As   Long  
   
    我想请问哪种方法最快的,并且我想加功能就是断点续传功能. 问题点数:0、回复次数:7Top

1 楼songyaowu(不以分多而蹭之;不因分少而不答; www.vb99.com)回复于 2004-12-03 08:28:18 得分 0

断点续传功能?恐怕只有第一种了吧。Top

2 楼jhtzz(执著男孩)回复于 2004-12-03 09:29:56 得分 0

Private   Declare   Function   ReadFile   Lib   "kernel32"   (ByVal   hFile   As   Long,   ByVal   lpBuffer   As   Long,   ByVal   nNumberOfBytesToRead   As   Long,   lpNumberOfBytesRead   As   Long,   ByVal   lpOverlapped   As   Long)   As   Long  
   
  那我想知道,这个API里面的  
  其中nNumberOfBytesToRead,就竟能放多大,是不是越大拷贝越快?但我测试,越大越快,但反而最几十字节的出问题了,比如说复制一个快捷方式,可是复制过后的快捷方式变了,不对,读出的大小也没有变化,反正就是用不起,那么我还想问,在程序复制的过程中能否跟据文件的大小或系统的存受能力来实时改变nNumberOfBytesToRead的大小?Top

3 楼cosio()回复于 2004-12-03 10:22:29 得分 0

,可是复制过后的快捷方式变了  
   
   
  ________________________________________________________  
   
  你不要用快捷方式来复制,因为快捷方式有路径的限制,你复制一个.exe的文件!  
  应该就可以了!Top

4 楼baoaya(点头)(大风起兮云飞扬)回复于 2004-12-03 10:27:34 得分 0

使用这个来拷贝  
  Public   Declare   Function   SHFileOperation   Lib   "shell32.dll"   Alias   "SHFileOperationA"   (lpFileOp   As   SHFILEOPSTRUCT)   As   LongTop

5 楼jhtzz(执著男孩)回复于 2004-12-03 10:55:37 得分 0

TO   baoaya(点头):  
        你说的这个API复制太慢了,而且复制到中途的时候出错的话我不知道拷到哪里了?  
  TO     cosio():  
        你没有呼明白我的意思,呵呵,快捷方式也是一个文件呀,问题是我要我要连快捷方式一起拷贝,比如说哈,我有一个目录,下面又有文件,又有快捷方式   ,哎!!其实说多了你都听糊了,其实一句话,就是小到几个字节的时候文件复制有问题,如果我将nNumberOfBytesToRead设成512或更小的,那大小文件都怪了,可是速度又提不来,我以前设的是1024*40,所以每秒的拷贝速度可以达到8--9M吧.Top

6 楼jhtzz(执著男孩)回复于 2004-12-03 10:56:36 得分 0

TO   baoaya(点头):  
        你说的这个API复制太慢了,而且复制到中途的时候出错的话我不知道拷到哪里了?  
  TO     cosio():  
        你没有呼明白我的意思,呵呵,快捷方式也是一个文件呀,问题是我要我要连快捷方式一起拷贝,比如说哈,我有一个目录,下面又有文件,又有快捷方式   ,哎!!其实说多了你都听糊了,其实一句话,就是小到几个字节的时候文件复制没有问题,如果我将nNumberOfBytesToRead设成512或更小的,那大小文件都对了,可是速度又提不来Top

7 楼jhtzz(执著男孩)回复于 2004-12-03 13:24:44 得分 0

另外:  
  Declare   Function   CreateFile   Lib   "kernel32"   Alias   "CreateFileA"   (ByVal   lpFileName   As   String,   ByVal   dwDesiredAccess   As   Long,   ByVal   dwShareMode   As   Long,   lpSecurityAttributes   As   SECURITY_ATTRIBUTES,   ByVal   dwCreationDisposition   As   Long,   ByVal   dwFlagsAndAttributes   As   Long,   ByVal   hTemplateFile   As   Long)   As   Long  
  和  
  Private   Declare   Function   OpenFile   Lib   "kernel32"   (ByVal   lpFileName   As   String,   lpReOpenBuff   As   OFSTRUCT,   ByVal   wStyle   As   Long)   As   Long  
   
  我想请问这两个API哪个快,那个的功能强大,因为我遇见一种情况,如下在拷贝的目标文件存在,并且带有只读属性,那么Openfile将打不开,也就是不能写入输入,如改成CreateFile呢?能否强制复盖呀Top

相关问题

  • 关于用VB实现拷贝文件的问题。
  • 用api拷贝文件
  • 在VB里使用代码拷贝大文件时,如何中止拷贝进程?
  • 有谁知道?我想用VB来拷贝一个文件夹下的所有文件,能做到吗?
  • 如何做到用VB来拷贝A驱磁盘中的所有文件包括文件夹及文件夹里的文件?
  • 文件拷贝:用CopyFile拷贝多个文件,在拷贝之前,如何估计拷贝所用的时间?
  • 拷贝文件
  • 文件拷贝
  • 在局域网中怎样用vb实现把文件从一台电脑拷贝到另一台电脑?
  • 请问如何在VB下实现文件的拷贝

关键词

  • 拷贝
  • 文件
  • 快捷方式
  • byval
  • 复制
  • longprivate
  • kernel32
  • lpfilename
  • long
  • 速度

得分解答快速导航

  • 帖主:jhtzz

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo