Delphi 实现目录删除、复制、移动

unit MainUnit;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, FileCtrl, ShellAPI;

type

TMainForm = class(TForm)

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.Button1Click(Sender: TObject);

var

yDir: String;

begin

yDir:= '';

if SelectDirectory(yDir, [sdAllowCreate, sdPerformCreate, sdPrompt], 0) then

Edit1.Text:= yDir;

end;

procedure TMainForm.Button2Click(Sender: TObject);

var

mdDir: String;

begin

mdDir:= '';

if SelectDirectory(mdDir, [sdAllowCreate, sdPerformCreate, sdPrompt], 0) then

Edit2.Text:= mdDir;

end;

procedure TMainForm.Button3Click(Sender: TObject);

var

OPS: TSHFileOpStruct;

FromBuf, ToBuf: Array[0..128]of Char;

begin

FillChar(FromBuf, SizeOf(FromBuf), 0); //初始化数组FromBuf

FillChar(ToBuf, SizeOf(ToBuf), 0); //初始化数组ToBuf

StrPCopy(FromBuf, PChar(Edit1.Text)); //将FromBuf填入源目录

StrPCopy(ToBuf, PChar(Edit2.Text)); //将ToBuf填入目的目录

with OPS do

begin

Wnd:= Handle;

wFunc:= FO_COPY; //进行复制

pFrom:= @FromBuf;

PTo:= @ToBuf;

fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;

fAnyOperationsAborted:= False;

hNameMappings:= nil;

lpszProgressTitle:= nil;

end;

if SHFileOperation(OPS)= 0 then

MessageBox(Handle, '复制成功!', '复制信息', MB_OK+ MB_ICONINFORMATION);

end;

procedure TMainForm.Button4Click(Sender: TObject);

var

OPS: TSHFileOpStruct;

FromBuf: Array[0..128]of Char;

begin

FillChar(FromBuf, SizeOf(FromBuf), 0); //初始化数组FromBuf

StrPCopy(FromBuf, PChar(Edit1.Text)); //将FromBuf填入源目录

with OPS do

begin

Wnd:= Handle;

wFunc:= FO_DELETE; //进行删除

pFrom:= @FromBuf;

pTo:= nil;

fFlags:= FOF_NOCONFIRMATION;

lpszProgressTitle:= '正在删除';

end;

if SHFileOperation(OPS)= 0 then

MessageBox(Handle, '删除成功!', '删除信息', MB_OK+ MB_ICONINFORMATION);

end;

procedure TMainForm.Button5Click(Sender: TObject);

var

OPS: TSHFileOpStruct;

FromBuf, ToBuf: Array[0..128]of Char;

begin

FillChar(FromBuf, SizeOf(FromBuf), 0); //初始化数组FromBuf

FillChar(ToBuf, SizeOf(ToBuf), 0); //初始化数组ToBuf

StrPCopy(FromBuf, PChar(Edit1.Text)); //将FromBuf填入源目录

StrPCopy(ToBuf, PChar(Edit2.Text)); //将ToBuf填入目的目录

with OPS do

begin

Wnd:= Handle;

wFunc:= FO_MOVE; //进行移动

pFrom:= @FromBuf;

PTo:= @ToBuf;

fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;

fAnyOperationsAborted:= False;

hNameMappings:= nil;

lpszProgressTitle:= '正在移动';

end;

if SHFileOperation(OPS)= 0 then

MessageBox(Handle, '移动成功!', '移动信息', MB_OK+ MB_ICONINFORMATION);

end;

end.