使用API函数复制文件,可显示进度。

原创 2004年10月14日 14:32:00

  以前一直以为用API函数只能调用系统的那个复制的对话框来显示进度,原来还有其他方法可以用,不过这个API只能在NT4.0及以上的版本上面才有。
  在工程里添加一个模块,将以下代码复制到模块里
Private Const PROGRESS_CANCEL = 1
Private Const PROGRESS_CONTINUE = 0
Private Const PROGRESS_QUIET = 3
Private Const PROGRESS_STOP = 2
Private Const COPY_FILE_FAIL_IF_EXISTS = &H1
Private Const COPY_FILE_RESTARTABLE = &H2

'// 此 API 在 WIN9X 下不能使用
Private Declare Function CopyFileEx Lib "kernel32.dll" Alias "CopyFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal lpProgressRoutine As Long, lpData As Any, ByRef pbCancel As Long, ByVal dwCopyFlags As Long) As Long

Private mlngCancel                  As Long
Private mprgState                   As Object
Private mlblState                   As Object

Public Function CopyProgressRoutine(ByVal TotalFileSize As Currency, _
                                    ByVal TotalBytesTransferred As Currency, _
                                    ByVal StreamSize As Currency, _
                                    ByVal StreamBytesTransferred As Currency, _
                                    ByVal dwStreamNumber As Long, _
                                    ByVal dwCallbackReason As Long, _
                                    ByVal hSourceFile As Long, _
                                    ByVal hDestinationFile As Long, _
                                    ByVal lpData As Long) As Long
   '// 显示进度
   mprgState.Value = CLng((100 / TotalFileSize) * TotalBytesTransferred)
   mlblState.Caption = "已完成: " & FormatPercent(mprgState.Value / 100, 0)
   '
   DoEvents
   '// 继续复制
   CopyProgressRoutine = PROGRESS_CONTINUE
End Function

'************************************************
'** 函数名称:  uCopyFile
'** 函数功能:  复制文件
'** 参数说明:
'**            strFrom              源文件
'**            strTo                目标文件
'**            prgState             进度条控件
'**            lblState             用来显示进度的 Label
'** 函数返回:
'**            Boolean 类型
'**            True                 复制成功
'**            False                复制失败
'** 参考实例:
'**
'**            blnReturn = uCopyFile("c:/test.exe", "d:/test.exe", prgState, lblState)
'************************************************
Public Function uCopyFile(ByVal strFrom As String, _
                          ByVal strTo As String, _
                          ByRef prgState As Object, _
                          ByRef lblState As Object) As Boolean
   Dim lngReturn                   As Long
  
   Set mprgState = prgState
   Set mlblState = lblState
   '// 开始复制
   lngReturn = CopyFileEx(strFrom, strTo, _
                          AddressOf CopyProgressRoutine, ByVal 0&, mlngCancel, COPY_FILE_RESTARTABLE)

   If lngReturn = 0 Then
      uCopyFile = False
   Else
      uCopyFile = True
   End If
End Function

  在调用时,直接使用 uCopyFile("c:/test.exe", "d:/test.exe", prgState, lblState),其中的 prgState 你可以去掉不要,由自己来定。

C# 利用系统API 复制大文件(显示进度条)

[csharp] view plaincopy using System;   using System.Collections.Generic;   using System.ComponentM...
  • CatchMe_439
  • CatchMe_439
  • 2017年01月19日 14:53
  • 843

复制文件时显示进度

本文转自: https://linux.cn/article-6734-1.html 如果你是一个 linux 系统管理员,那么毫无疑问你必须花费大量的工作时间在命令行上:安装和...
  • MaoshiYIHAO
  • MaoshiYIHAO
  • 2018年02月02日 10:58
  • 47

[C#]实现文件复制[更新]实时显示进度条

在复制更新文件时,如果想要实时的获得文件复制的进度,并显示在窗体的进度条上有许多方法,在寻找了一段资料后,我整理了一些别人的代码,获得到本篇的代码,代码实现了根据配置文件,复制文件列表的效果.思路其实...
  • much0726
  • much0726
  • 2008年12月17日 17:27
  • 12596

使用C#在进度条中显示复制文件的进度

Code List:-------------------------------------------------------------------------/****************...
  • OneDotRed
  • OneDotRed
  • 2004年11月13日 15:27
  • 3436

使用Java复制文件及显示进度

使用Java复制文件及显示进度 最近在学Java,今天搞了一个复制文件的代码,主要是通过BufferedInputStream和BufferedOutputStream对文件进行复制 没什么技术含...
  • ylqhust
  • ylqhust
  • 2014年12月04日 21:36
  • 1273

Linux C 实现mycp 可以显示文件拷贝进度

在Linux系统里面用到 cp命令复制不能显示文件拷贝的进度,也不能计算还有多长时间文件可以 拷贝结束,现在写一个程序可以显示文件拷贝的进度。思路:当前目录下面有一个1G大小的bigfile文件当我在...
  • u010889616
  • u010889616
  • 2015年07月15日 18:34
  • 2030

复制文件显示进度

package lianxi1227;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.I...
  • ytfunnysite
  • ytfunnysite
  • 2016年12月28日 12:11
  • 262

Windows系统下,往硬盘里复制粘贴文件不显示,也不提示进度条的解决办法

近两天电脑一直超负荷工作,媳妇叉U盘,貌似感染病毒了,删除文件,拷贝文件,在文件夹里面不会显示,需要手动刷新才行,复制粘贴的进度条也没有;查了相关资料,解决办法如下: cmd进入dos窗口命令:ad...
  • nxstack
  • nxstack
  • 2017年08月03日 20:12
  • 1266

多线程复制文件显示进度

package thread0103; public class Downtest { public static void main(String[] args) { Dow...
  • ytfunnysite
  • ytfunnysite
  • 2017年01月03日 13:39
  • 197

项目总结(三)——复制文件时显示进度对话框

实际需求介绍:        由于本系统将采用光盘随书分发,故写了个光盘运行菜单程序,使用户可以选择安装和快捷浏览部分文件。本来这个菜单程序功能也没什么,很容易实现。谁知最后客户突然要求加个菜单项来...
  • tht2009
  • tht2009
  • 2011年09月06日 16:14
  • 5113
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用API函数复制文件,可显示进度。
举报原因:
原因补充:

(最多只允许输入30个字)