文档章节

带进度的文件复制 - 回复 "冷风无泪" 的问题

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 267
阅读 8
收藏 0
点赞 0
评论 0
问题来源: http://www.cnblogs.com/del/archive/2008/12/02/1066817.html#1389078

本例效果图:



代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ProgressBar1: TProgressBar;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  getPath = 'c:\temp\get.rar';
  setPath = 'c:\temp\set.rar';
var
  getStream,setStream: TFileStream;
  num, n: Integer;
  buf: PByte;
  BufSize,block: Integer;
begin

  if not FileExists(getPath) then
  begin
    ShowMessage('源文件不存在');
    Exit;
  end;

  getStream := TFileStream.Create(getPath, fmOpenRead or fmShareExclusive);
  setStream := TFileStream.Create(setPath, fmCreate);

  num := getStream.Size;
  setStream.Size := num;
  getStream.Position := 0;
  setStream.Position := 0;

  BufSize := num;
  block := BufSize div 100;
  GetMem(buf, BufSize);

  ProgressBar1.Max := 100;
  ProgressBar1.Min := 0;
  ProgressBar1.Position := 0;

  while num <> 0 do
  begin
    Application.ProcessMessages;
    n := block;
    if n > num then n := num;
    getStream.ReadBuffer(buf^, n);
    setStream.WriteBuffer(buf^, n);
    ProgressBar1.Position := Trunc((1 - num / BufSize) * 100);
    Dec(num, n);
  end;

  FreeMem(buf, BufSize);
  getStream.Free;
  setStream.Free;

  ShowMessage('复制完毕');
  ProgressBar1.Position := 0;
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 104
  ClientWidth = 265
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 96
    Top = 56
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object ProgressBar1: TProgressBar
    Left = 8
    Top = 16
    Width = 249
    Height = 17
    TabOrder = 1
  end
end

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
如何用js+html+server端代码实现上传文件并带进度条

查了不少资料,包括oschina上的例子,好像没有什么很好的办法实现文档上传并带进度条。 具体来说,目前我遇到的问题就是在上传时,不知道如何获取上传文档的大小。这样就没法显示比例。是不是...

lns ⋅ 2012/02/01 ⋅ 3

比加班还令程序员厌恶的事情有哪些?

加班,对于程序员来说是家常便饭,更是万分厌恶和时常用来自嘲的事情。但是,你以为加班就是最令程序员讨厌的事情了吗? 以下几件,可是件件都能让程序员欲哭无泪、头皮发麻、咬牙切齿! 产品...

uw63zqpkxwlrl1 ⋅ 03/10 ⋅ 0

为开发者和设计者准备的 HTML5 文件上传教程

本文主要是收集了一些使用 HTML5 进行文件上传的教程: 纯 HTML5 文件上传 带进度条的 HTML5 文件上传 HTML5 拖放式文件上传的 API 教程 全新的 HTML5 多文件上传 使用 jQuery 的 HTML5 文件...

红薯 ⋅ 2012/01/18 ⋅ 4

仿写映客直播--TJPYingKe

仿映客直播 app,基于 IJKPlayer 的直播 demo。 功能更新: pch文件绝对路径改为相对路径 导航栏标签为接口返回数据,不再为固定数据 添加了轮播图,以及带进度条的webView 细节优化,首页UI更新...

五仁月饼 ⋅ 2017/03/17 ⋅ 0

【Apollo】【driver】【gnss】适配新的gps设备的方式与经验总结

接上一篇文章《【Apollo】【driver】【gnss】模块调试与分析》,这篇主要讲如何在gnss中适配新的gps设备与遇到的问题总结。 一般的步骤要以文件 ,这里多介绍踩过的坑和相关经验 修改代码 新...

sunyoop ⋅ 05/25 ⋅ 0

Android第四十一天(3)

1、NotificationManager类对象 <1>getSystemService(Context.NOTIFICATION_SERVICE) 获取通知管理对象 <2>notify(int id, Notification notification) //定义通知管理对象 //定义通知构造器......

黄晓磊 ⋅ 2016/07/25 ⋅ 0

Destoon大文件上传限制,修改设置上限。

V4.0支持swfupload带进度提示上传大文件,对于视频和下载频道,需要上传的文件体积可能较大,所以要做以下设置才可以正常上传。 1.修改php.ini postmaxsize 参数,例如修改为100M 2.修改php...

老朱教授 ⋅ 2017/10/01 ⋅ 0

美图秀秀DBA谈MySQL运维及优化

随着MySQL应用的不断普及和自身发展,如何更好的优化MySQL和使用MySQL,依然是一个比较有挑战的问题,尤其是在业务快速增长的场景下。本次分享主要介绍一些通用的运维优化实践和问题,以及未...

杨尚刚 ⋅ 2015/12/31 ⋅ 0

Linux系统文件权限的备份与恢复

最近一直在思考一个问题,如果手抖不小心执行命令chmod 777 -R /,刚好没有系统备份,那就真的是悲剧了。生产系统的备份,真的是重中之重啊。 本次只讨论如何备份系统文件权限。 1、创建一个...

初级泥水工 ⋅ 2016/03/16 ⋅ 0

retrofit,okhttp

Android RxJava+Retrofit2+RxBinding RxJava+Retrofit2+RxBinding 笔记 MVP + Rxjava + Retrofit 构建项目 2015 年最值得 Android 程序猿去学习的就是 RxJava 了,关于 RxJava 就不再多描述了......

掘金官方 ⋅ 01/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

两道面试题,带你解析Java类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} cl...

1527 ⋅ 10分钟前 ⋅ 0

SpringCloud(Data Flow)

dataflow-server

赵-猛 ⋅ 21分钟前 ⋅ 0

深入理解Java虚拟机

这本书我读到第8章,之后就是在读不下去了。 读到后面是一种痛苦的体验,太多的东西是不全面的,大量的专有名词是没有解释的,读到最后很多东西仅仅是一个侧面,所以我觉得,这本书不适合初学...

颖伙虫 ⋅ 26分钟前 ⋅ 0

B树和B+树的总结

B树 为什么要B树 磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的...

浮躁的码农 ⋅ 29分钟前 ⋅ 0

NanoPi NEO core/ Ubuntu16.04单网卡配置3个IP地址(2个静态,1个动态)

配置 root@NanoPi-NEO-Core:/etc/network# cat interfacesauto loiface lo inet loopbackallow-hotplug eth0iface eth0 inet static address 172.31.188.249 netmask 255.......

SamXIAO ⋅ 55分钟前 ⋅ 0

三步为你的App集成LivePhoto功能

摘要:LivePhoto是iOS9新推出的一种拍照方式,类似于拍摄Gif图或录制视频片段生成图片。如果没有画面感,可以联想《哈利波特》霍格沃茨城堡的壁画,哈哈,很炫酷有木有,但坑爹的是只有iphone6S以...

壹峰 ⋅ 今天 ⋅ 0

centos7 git安装

由于centos中的源仓库中git不是最新版本,需要进行源码安装。 1、查看yum仓库git信息 [root@iZm5e3d4r5i5ml889vh6esZ zh]# yum info gitLoaded plugins: fastestmirrorLoading mirror s...

xixingzhe ⋅ 今天 ⋅ 0

input file 重复上传同一张图片失效的解决办法

解决办法 方法一:来回切换input[type='file']的type属性值,可以是‘text’,'button','button'....,然后再切换回来‘file’ 方法二:每次取消图片预览后,重置input[type='file']的value的...

时刻在奔跑 ⋅ 今天 ⋅ 0

Mahout推荐算法API详解

前言 用Mahout来构建推荐系统,是一件既简单又困难的事情。简单是因为Mahout完整地封装了“协同过滤”算法,并实现了并行化,提供非常简单的API接口;困难是因为我们不了解算法细节,很难去根...

xiaomin0322 ⋅ 今天 ⋅ 0

WampServer默认web服务器根目录位置

安装WampServer之后的web服务器根目录默认位置在WampServer安装目录下的www:

临江仙卜算子 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部