CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

文件拷贝:用CopyFile拷贝多个文件,在拷贝之前,如何估计拷贝所用的时间?

楼主happyzsl(学习)2002-11-29 11:40:15 在 Delphi / Windows SDK/API 提问

文件拷贝:用CopyFile拷贝多个文件,在拷贝之前,如何估计拷贝所用的时间? 问题点数:100、回复次数:18Top

1 楼SilveryFox(一天一点爱恋......)回复于 2002-11-29 13:34:08 得分 0

你试试可否根据字节流量计算(byrereceived/bytetotal)Top

2 楼mrfanghansheng(☆☆☆木鱼☆☆☆)回复于 2002-11-29 13:35:32 得分 0

学习……Top

3 楼wuxuan(真心英雄)回复于 2002-11-29 13:38:25 得分 0

先统计要COPY文件的大小,然后根据硬件传输速率来进行时间计算.Top

4 楼vmao(毛小毛)回复于 2002-11-29 13:43:07 得分 0

学习……  
  Top

5 楼cbdiy(暂无)回复于 2002-11-29 13:44:15 得分 0

用文件流   拷贝完全可以实现。。Top

6 楼stanely(俺是邢她汉子)回复于 2002-11-29 13:45:39 得分 0

gettickcountTop

7 楼happyzsl(学习)回复于 2002-11-29 14:36:08 得分 0

各位请说明白一点  
  另外:用文件流拷贝如何实现?Top

8 楼zwhhoo(我爱真理)回复于 2002-11-29 14:48:19 得分 0

CopyFile要简单,还是用它吧,计算出每个文件的大小,用这为依据。  
  文件流TFileStream.Create(FileName,   fmCreate);Top

9 楼happyzsl(学习)回复于 2002-11-29 15:33:29 得分 0

怎么知道copyfile的速度???Top

10 楼cneast(东东)回复于 2002-11-29 17:05:46 得分 0

用ShFileOperation不是更好吗?Top

11 楼linx88(haozi)回复于 2002-11-29 18:02:09 得分 0

统计所有文件大小,和记录没个文件大小,先安预先得到的速度估计时间,每次完成一个copyfile在估算一下剩余时间,不过这样得到的数据误差较大。你也可以用readfile,writefile来完成,得到的时间会比较准确。Top

12 楼happyzsl(学习)回复于 2002-11-30 11:05:35 得分 0

就是怎么得到速度啊Top

13 楼wxjh(农民)回复于 2002-12-01 21:04:24 得分 0

使用文件流,利用指针的位置,进行计算。。。。。OK~~  
  Top

14 楼RamjetZhang(万花从中一点红,玉树临风王小桃是也)回复于 2002-12-01 22:41:23 得分 0

你看windows自己显示的时间准过否?Top

15 楼stanely(俺是邢她汉子)回复于 2002-12-01 23:50:18 得分 0

你要估算?  
   
  先得到整个要复制的数据的大小,用timegettime得到复制之前的时间,并纪录下来,每复制10k或者一定数据以后监测现在时间,并跟最先纪录的时间比较,得到的商就是复制速度,那么剩下的数据量和速度的商,就是剩余时间。  
   
  理论上应该可行,因为如果数据总量很小,估算时间给用户看,也没什么意义,因为时间很短。  
   
  如果数据量大,就有意义了,比如自己做个安装程序,安装的时候估算剩余时间并显示在安装界面上。  
   
  关键就是每隔多少k估算一次,太小太大都没意义。我觉得取复制总量的1/20就够,上限是100k,下限1k,具体的还要你试验。  
   
  Top

16 楼xyxx(雪域雄师)回复于 2002-12-02 09:38:15 得分 0

学习。。。。Top

17 楼happyzsl(学习)回复于 2002-12-03 09:07:41 得分 0

使用CopyFileEx进行带进度条的文件复制  
  http://asp3.6to23.com/dever/windowsdev/file/file20.asp  
   
   
      CopyFileEx可以在copy期间撤销操作,主要利用系统的callback函数来取得相应的传输字节和文件大小来进行进度条的设置  
   
  //callback函数设置  
  Function   CopyProgressRoutine(  
      TotalFileSize   :   Int64;  
      TotalBytesTransferred   :   Int64;  
      StreamSize   :   Int64;  
      StreamBytesTransferred   :   Int64;  
      dwStreamNumber   :   Cardinal;  
      dwCallbackReason   :   DWord;  
      hSourceFile   :   THandle;  
      hDestinationFile   :   THandle;  
      lpData   :   Pointer):Dword;  
   
  Begin  
      form1.Label1.Caption   :='已复制'   +   floattostr(     (Trunc((TotalBytesTransferred/(1024*1024))*100)/100)   )   +   'M';  
   
      form1.ProgressBar1.Position   :=   trunc((TotalBytesTransferred/StreamSize)*100);  
      form1.ProgressBar1.Update;  
      application.ProcessMessages;  
      Result   :=   PROGRESS_CONTINUE;  
  end;  
   
  //copy代码  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      If   CopyFileEx('e:\downfile\PW2002SP1.exe','d:\pw.exe',@CopyProgressRoutine,nil,PBool(0),COPY_FILE_RESTARTABLE)   =   false   Then  
          RaiseLastOsError;  
  end;  
   
   
   
   
  Top

18 楼nice521(愉快人生)回复于 2002-12-03 11:26:53 得分 100

CopyFileEx只能在WIN2000或WINNT下使用。Top

相关问题

  • copyfile拷贝文件问题
  • 拷贝文件
  • 文件拷贝
  • 文件夹拷贝
  • ftp拷贝文件
  • 为何用copyfile进行拷贝文件却拷贝不成功,这是为什么?
  • 使用copyfile进行拷贝文件提示"operation oborted"这是什么意思?
  • 如何用copyfile函数,实现网络文件的拷贝,请帮助。
  • 文件拷贝的问题
  • 拷贝文件的问题

关键词

  • 拷贝
  • 文件
  • 数据
  • 安装
  • copyfile
  • 复制
  • copyfileex
  • totalbytestransferred
  • 估算
  • 时间

得分解答快速导航

  • 帖主:happyzsl
  • nice521

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

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