delphi 同盘移动文件所用时间测试(文件大小约6,083,545,088 字节)

由于想做个 "delphi桌面图标清理备份与恢复"

所以有必要测试一下各种方法对文件移动占用时间的影响

unit Unit1;
//桌面图标备份、恢复与清理
{
1 创建3个文件夹
  C:\Users\Public\Desktop
  D:\Personal\AutoRun\Desktoplnk\DesktopBak
  D:\Personal\AutoRun\Desktoplnk\DesktopLnk
2 移动 C:\Users\Public\Desktop 中的文件和文件夹到
D:\Personal\AutoRun\Desktoplnk\DesktopBak
3 移动 D:\Personal\桌面  中的文件和文件夹到
D:\Personal\AutoRun\Desktoplnk\DesktopBak
4 复制 D:\Personal\AutoRun\Desktoplnk\DesktopLnk 到
C:\Users\Public\Desktop 中
}
interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1             : TForm1;

implementation

{$R *.dfm}

procedure ShellFileOperation(fromFile: string; toFile: string; Flags: Integer);
//FO_MOVE移动文件夹,FO_Copy复制文件夹(不覆盖)
var
  shellinfo         : TSHFileOpStructA;
begin
  with shellinfo do
    begin
      wnd := Application.Handle;
      wFunc := Flags;
      pFrom := PChar(fromFile);
      pTo := PChar(toFile);
    end;
  SHFileOperation(shellinfo);
end;

procedure CopyFileByFolder(Ahandle: THandle; fromDir,
  toDir: string);
var
  SHFileOpStruct    : TSHFileOpStruct;
  pFromDir, pToDir  : PAnsiChar;
begin
  GetMem(pFromDir, Length(fromDir) + 2);
  try
    GetMem(pToDir, Length(toDir) + 2);
    try
      FillChar(pFromDir^, Length(fromDir) + 2, 0);
      FillChar(pToDir^, Length(toDir) + 2, 0);
      StrCopy(pFromDir, PChar(fromDir));
      StrCopy(pToDir, PChar(toDir));
      with SHFileOpStruct do
        begin
          Wnd := AHandle;               // Assign the window handle
          wFunc := FO_COPY;             // Specify a file copy
          pFrom := pFromDir;
          pTo := pToDir;
          fFlags := FOF_NOCONFIRMATION or FOF_SILENT;
          fAnyOperationsAborted := True;
          hNameMappings := nil;
          lpszProgressTitle := nil;
          if SHFileOperation(SHFileOpStruct) <> 0 then
            RaiseLastWin32Error;
        end;
    finally
      FreeMem(pToDir, Length(ToDir) + 2);
    end;
  finally
    FreeMem(pFromDir, Length(FromDir) + 2);
  end;
end;

procedure DeleteDirFile(ADir: string);
var
  sr                : TsearchRec;
begin
  if not DirectoryExists(ADir) then Exit;

try
    if FindFirst(ADir + '*.*', faAnyFile, sr) = 0 then
      begin
        repeat
          DeleteFile(PAnsiChar(ADir + sr.Name));
        until FindNext(sr) <> 0;
      end;
  finally

FindClose(sr);
  end;

end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Dir               : string;
  BakDir            : string;
begin
  //  1 创建3个文件夹
      //    C: \Users\Public\Desktop
      //  D: \Personal\AutoRun\Desktoplnk\DesktopBak
      //  D: \Personal\AutoRun\Desktoplnk\DesktopLnk
  Dir := 'C:\Users\Public\Desktop';
  if not DirectoryExists(dir) then
    ForceDirectories(dir);
  BakDir := 'D:\Personal\AutoRun\Desktoplnk\DesktopBak\' +
    Formatdatetime('yyyymmddhhnnss', Now());
  if not DirectoryExists(BakDir) then
    ForceDirectories(BakDir);
  Dir := 'D:\Personal\AutoRun\Desktoplnk\DesktopLnk';
  if not DirectoryExists(dir) then
    ForceDirectories(dir);

//2 移动 C:\Users\Public\Desktop 中的文件和文件夹到
  //D:\Personal\AutoRun\Desktoplnk\DesktopBak
  ShellFileOperation('C:\Users\Public\Desktop\*.*',
    BakDir, FO_move);
  CopyFileByFolder(Self.Handle, 'C:\Users\Public\Desktop\*.*',
    BakDir);
  DeleteDirFile('C:\Users\Public\Desktop');
  //  3 移动 D:\Personal\桌面 中的文件和文件夹到
 //  D: \Personal\AutoRun\Desktoplnk\DesktopBak
  ShellFileOperation('D:\Personal\桌面\*.*',
    BakDir, FO_move);
  //  4 复制 D: \Personal\AutoRun\Desktoplnk\DesktopLnk 到
  //  C: \Users\Public\Desktop 中

CopyFileByFolder(Self.Handle, 'D:\Personal\AutoRun\Desktoplnk\DesktopLnk\*.*',
    'C:\Users\Public\Desktop\');
  {如果目标文件存在, True: 失败; False: 覆盖}
  Application.Terminate;
end;

end.

///

BAT批处理版

REM 创建目录
md D:\Personal\桌面bak\

REM 备份桌面文件
start /min xcopy /e /c /i /q /r /y C:\Users\Public\Desktop\*.* D:\Personal\桌面bak\
xcopy /e /c /i /q /r /y C:\Users\Public\Desktop\*.* D:\Personal\桌面bak\
xcopy /e /c /i /q /r /y C:\Users\Public\Desktop\*.* D:\Personal\桌面bak\
start /min xcopy /e /c /i /q /r /y D:\Personal\桌面\*.* D:\Personal\桌面bak\
xcopy /e /c /i /q /r /y D:\Personal\桌面\*.* D:\Personal\桌面bak\
xcopy /e /c /i /q /r /y D:\Personal\桌面\*.* D:\Personal\桌面bak\

REM 清理桌面文件
REM 跳转到D:盘
D:
REM 改变当前目录以便使用deltree.exe
cd D:\Personal\AutoRun\清理桌面图标
start /min deltree /y C:\Users\Public\Desktop\*.*
start /min deltree /y D:\Personal\桌面\*.*
deltree /y C:\Users\Public\Desktop\*.*
deltree /y D:\Personal\桌面\*.*

REM 恢复桌面默认图标
start /min xcopy /e /c /i /q /r /y D:\Personal\AutoRun\清理桌面图标\桌面图标备份\*.* C:\Users\Public\Desktop\
xcopy /e /c /i /q /r /y D:\Personal\AutoRun\清理桌面图标\桌面图标备份\*.* C:\Users\Public\Desktop\

exit

转载于:https://www.cnblogs.com/delphichm/p/3470718.html

delphi 同盘移动文件所用时间测试(文件大小约6,083,545,088 字节)相关推荐

  1. FastCopy和ExtremeCopy同盘移动文件速度测试比较评测

    FastCopy和ExtremeCopy同盘移动文件速度测试比较评测 一般情况下我只用 <ExtremeCopy 专业版 2.3.4 绿色破解版> 这款软件来复制文件.而不会去使用Fast ...

  2. 在Delphi中获取和修改文件的时间

    Delphi中提供了很完备的Windows API函数的调用接口,可以方便的进行高级Windows编程.利用Delphi中的FindFirst函数可以得到一个文件的属性记录,该记录中的FindData ...

  3. 测试 RAM 盘和 DISK 盘的文件读写速度

    一.目的 1.熟悉类 UNIX 系统的 I/O 设备管理 2.熟悉 MINIX 块设备驱动 3.熟悉 MINIX RAM 盘 二.内容与设计思想 测试 RAM 盘和 DISK 盘的文件读写速度,分析其 ...

  4. 关于FAT32分区的U盘4GB文件的测试

    关于FAT32分区的U盘4GB文件的测试 很多人都知道FAT32的分区,单文件大小不能超过4GB,关于这个问题就来测测看. FAT32最大文件大小为2的32次方,也就是4294967296 Byte, ...

  5. 测试Unity中常用代码的运行所用时间:三维向量和变换位移篇 #性能测试 #Vector3 #tranform.position

    C# Vector3 和 transform.position 篇 〇.前言 系统自带计时器 -System.Diagnostics.StopWatch- 的使用 一.三维向量测试 1. 三维向量的函 ...

  6. linux用u盘拷文件损坏,复制到u盘的文件总是损坏怎么办解决?

    手上有一个U盘,买得很便宜,最近复制到u盘的文件总是损坏,然后用量产工具修复U盘,查资料说是黑片的,量产后再次使用一段时间后又出现文件损坏的问题,然后量产多少次都没用,换黑片量产工具速度优先也是无效: ...

  7. 能把计算机c盘我的文档,电脑c盘哪些文件可以删除,手把手教你c盘里哪些文件可以删除...

    如果不是系统重要文件,无关紧要的话那么这些文件就可以清除,但计算机操作系统的文件是不能随意乱删除的,一旦乱删除了,计算机就会罢工了,这就让不少的用户感到困惑了,那么c盘里哪些文件可以删除?下面,小编就 ...

  8. 怎么传文件到百度云服务器,别人传文件给我 可是怎么用百度网盘保存文件呢 其实很简单!...

    昨天有不少朋友问老北,百度网盘点下载没有反应,所以老北写一篇关于网盘如何下载文件和上传文件(本文适合新手,高手请飘过吧,手下留情). 生活中或者工作中经常会涉及到传送文件,一般大小的文件都是用微信.Q ...

  9. 记录一次实现网盘间文件同步工具

    目录 工具实现过程记录 背景和目的 基础设计 网盘SDK基础工具 文件模型和网盘模型 配置文件和账号模型 任务模型 初步工作 找到指定目录和读取目录下的文件 如何对比 多任务的调度 改进和细化 多线程 ...

最新文章

  1. Ajax弹出式无刷新城市选择特效
  2. 关于android ksoap获取失败的问题
  3. java 泛型小小的测试题
  4. warshall算法求传递闭包c++_【建模小课堂】图论算法
  5. 电脑有两个显示器用来显示,如何配置呢,请看下文
  6. 一款很好看的个人主页源码
  7. 微信公众号教程(16)公司通讯录开发 终
  8. nvme固态硬盘开机慢_固态硬盘速度慢?三步教你开启SSD全速模式!
  9. 史上最全的launch的解析来啦,木有之一欧
  10. 35岁的程序员:第9章,女测试
  11. proftpd ldap mysql_安装proftpd+ldap报错
  12. 吴雪筠校友报告会----职场仪表、心态、自强之道
  13. 逆市稳进的基本盘 苏宁赢了什么?
  14. 历史最全自然语言处理测评基准分享-数据集、基准(预训练)模型、语料库、排行榜
  15. 大学物理复习笔记——静电场中的导体和电介质
  16. c3p0的基本使用方法
  17. 如何在Github快速找到资源(资源快速检索)
  18. 告别RNN,迎来TCN!将深度学习应用于股市预测
  19. hdu4422The Little Girl who Picks Mushrooms
  20. 自主导航小车实践(四)

热门文章

  1. 译文 | 与TensorFlow的第一次接触 第五章:多层神经网络
  2. java 信号量 互斥锁_线程同步(互斥锁与信号量的作用与区别)
  3. sc925 文档服务器,dell服务器磁盘阵列配置手册.docx
  4. php 不解析,php不解析html代码
  5. php设计模式在框架中的应用,关于设计模式在实际场景中的应用
  6. 谷歌浏览器不能安装离线插件——可行方法
  7. 数字类型转换 --Python3
  8. 微信小程序,转盘抽奖
  9. CDOJ 1803 绿帽自动机 思维题
  10. VM虚拟机连Linux黑屏问题