关于文件夹拷贝的问题:
我想拷贝文件夹A(包括里面的所有的子文件夹和文件)到另外的目录B中;如果B中找不到A中的文件(或子文件夹),则Copy;如果有,则不用Copy,也不用覆盖。也可以这样说,如果B中有一部分A中文件(或子文件夹),则存在的这部分文件不管,其余的文件(或子文件夹)给予拷贝。望赐教!
我想拷贝文件夹A(包括里面的所有的子文件夹和文件)到另外的目录B中;如果B中找不到A中的文件(或子文件夹),则Copy;如果有,则不用Copy,也不用覆盖。也可以这样说,如果B中有一部分A中文件(或子文件夹),则存在的这部分文件不管,其余的文件(或子文件夹)给予拷贝。望赐教!
解决方案 »
- 二进制加法问题
- delphi--廉颇已老?
- 如何在RAVE报表中调用数据库中字段值后,将数据前加两个00?
- 如何创建远程数据模块TRemoteDataModule,近来帮忙解决一下 200501
- 插入字符
- 我的机器昨天突然死机了 开机按扭 和 重启 都不好使了 只能通过 拔掉电源开关 重新启动 有时候
- dll问题高手请教
- 请问哪里有比较详细实用的打印教程?
- 如何获取优盘的物理序列号???小弟急用!!!
- 好急(报错):[DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或拒绝访问。
- 高手帮忙!!!!急!!!!!!
- D5下安装 xpMune,怎么一编译就那么多错,有点急!!
声名:Declare Function SHFileOperation Lib "shell32.dll" Alias " SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long用这个函数可以实现部分功能,其他的自己写吧
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;type
TMainForm = class(TForm)
GroupBox1: TGroupBox;
spbtnGetFromDir: TSpeedButton;
spbtnGetToDir: TSpeedButton;
edtFromDir: TEdit;
edtToDir: TEdit;
Button1: TButton;
GroupBox2: TGroupBox;
edtRecycleDir: TEdit;
spbtnRecycleBin: TSpeedButton;
btnRecycleDir: TButton;
btnClose: TButton;
procedure spbtnGetFromDirClick(Sender: TObject);
procedure spbtnGetToDirClick(Sender: TObject);
procedure btnCopyDirectoryClick(Sender: TObject);
procedure spbtnRecycleBinClick(Sender: TObject);
procedure btnRecycleDirClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
MainForm: TMainForm;implementation
uses ShellAPI, FileCtrl;
{$R *.DFM}function GetDirectory: String;
begin
if not SelectDirectory(Result, [sdAllowCreate, sdPerformCreate, sdPrompt], 0) then
Result := EmptyStr;
end;procedure CopyDirectoryTree(AHandle: THandle; const AFromDirectory, AToDirectory: String);
var
SHFileOpStruct: TSHFileOpStruct;
FromDir: PChar;
ToDir: PChar;
begin GetMem(FromDir, Length(AFromDirectory)+2);
try
GetMem(ToDir, Length(AToDirectory)+2);
try FillChar(FromDir^, Length(AFromDirectory)+2, 0);
FillChar(ToDir^, Length(AToDirectory)+2, 0); StrCopy(FromDir, PChar(AFromDirectory));
StrCopy(ToDir, PChar(AToDirectory)); with SHFileOpStruct do
begin
Wnd := AHandle; // Assign the window handle
wFunc := FO_COPY; // Specify a file copy
pFrom := FromDir;
pTo := ToDir;
fFlags := FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
if SHFileOperation(SHFileOpStruct) <> 0 then
RaiseLastWin32Error;
end;
finally
FreeMem(ToDir, Length(AToDirectory)+2);
end;
finally
FreeMem(FromDir, Length(AFromDirectory)+2);
end;
end;procedure ToRecycle(AHandle: THandle; const ADirName: String);
var
SHFileOpStruct: TSHFileOpStruct;
DirName: PChar;
BufferSize: Cardinal;
begin
BufferSize := Length(ADirName) +1 +1;
GetMem(DirName, BufferSize);
try
FillChar(DirName^, BufferSize, 0);
StrCopy(DirName, PChar(ADirName)); with SHFileOpStruct do
begin
Wnd := AHandle;
wFunc := FO_DELETE;
pFrom := DirName;
pTo := nil;
fFlags := FOF_ALLOWUNDO; fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end; if SHFileOperation(SHFileOpStruct) <> 0 then
RaiseLastWin32Error;
finally
FreeMem(DirName, BufferSize);
end;
end;procedure TMainForm.spbtnGetFromDirClick(Sender: TObject);
begin
edtFromDir.Text := GetDirectory;
end;procedure TMainForm.spbtnGetToDirClick(Sender: TObject);
begin
edtToDir.Text := GetDirectory;
end;procedure TMainForm.btnCopyDirectoryClick(Sender: TObject);
begin
CopyDirectoryTree(Handle, edtFromDir.Text, edtToDir.Text);
end;procedure TMainForm.spbtnRecycleBinClick(Sender: TObject);
begin
edtRecycleDir.Text := GetDirectory;
end;procedure TMainForm.btnRecycleDirClick(Sender: TObject);
begin
ToRecycle(0, edtRecycleDir.Text);
end;procedure TMainForm.btnCloseClick(Sender: TObject);
begin
Close;
end;end.