我想做一个备份功能的软件,目的就是执行该软件,可以把指定的文件夹(如c:\test\*.*)下的所有文件(可能还包括子文件夹)拷贝到指定的文件夹(D:\test\)下,对单个文件可以拷贝复制,但是如何对整个目录下的文件或文件夹进行复制呢?请大家给我一点建议!谢谢!
解决方案 »
- IdTCPServer1如何向idtcpclient 发送汉字
- 请问用delphi 怎样把字符串转成16 进制 例如 'a1' 转为 $a1
- 我想100分问一个关于构造函数,重载重构,overload,override的问题!!!
- 如何实现对于TreeView组件的复选!
- 请问,在Delphi中如何调用Lingo进行运筹学计算?
- 有谁知道有哪些游戏是用DELPHI做的啊?
- 奥运...台湾(爱国的请进)
- 关于ADO的问题?
- 我要告别Delphi一段时间了,有愿意送我一程的吗?
- 如何使下拉式列表中的成员是一个数据库的字段的内容(保证给分)!!!
- D6的中提示不见了,怎么办
- 如何用代码对窗口加对象?下列代码错在哪?
var
fo: TSHFILEOPSTRUCT;
begin
FillChar(fo, SizeOf(fo), 0);
with fo do
begin
Wnd := 0;
wFunc := FO_DELETE;
pFrom := PChar(source+#0);
pTo := #0#0;
fFlags := FOF_NOCONFIRMATION+FOF_SILENT;
end;
Result := (SHFileOperation(fo) = 0);
end;
复制目录:
function CopyDirectory(const Source, Dest: string): boolean;
var
fo: TSHFILEOPSTRUCT;
begin
FillChar(fo, SizeOf(fo), 0);
with fo do
begin
Wnd := 0;
wFunc := FO_COPY;
pFrom := PChar(source+#0);
pTo := PChar(Dest+#0);
fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR ;
end;
Result := (SHFileOperation(fo) = 0);
end;重新命名:
用MoveFile()或者下面的函数也可以。
//RenDirectory('d:\wt2','d:\bcde');
function RenDirectory(const OldName,NewName:string): boolean;
var
fo: TSHFILEOPSTRUCT;
begin
FillChar(fo, SizeOf(fo), 0);
with fo do
begin
Wnd := 0;
wFunc := FO_RENAME;
pFrom := PChar(OldName+#0);
pTo := pchar(NewName+#0);
fFlags := FOF_NOCONFIRMATION+FOF_SILENT;
end;
Result := (SHFileOperation(fo) = 0);
end;
//Copy 多个文件的处理:
function CopyFiles(const Source,Dest: string): boolean;
var
fo: TSHFILEOPSTRUCT;
begin
FillChar(fo, SizeOf(fo), 0);
with fo do
begin
Wnd := 0;
wFunc := FO_COPY;
pFrom := @source[1];
pTo :=pchar(dest);
fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR ;
end;
Result := (SHFileOperation(fo) = 0);
end;procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
i:integer;
begin
if opendialog1.Execute then
begin
for i:=0 to OpenDialog1.Files.Count-1 do
str:=str+OpenDialog1.Files.strings[i]+#0;
showmessage(str);
str:=str+#0;
CopyFiles(str,'d:\temp');
end;
end;
var DirInfo: TSearchRec;
DosError: Integer;
begin
DosError := FindFirst(SourceDir+'\*.*', FaAnyfile, DirInfo);
if not DirectoryExists(TargetDir) then ForceDirectories(TargetDir);
while DosError=0 do
begin
if ((DirInfo.Attr and FaDirectory)=faDirectory) and (DirInfo.Name<>'.') and (DirInfo.Name<>'..')
then XCopyDir(SourceDir + '\' + DirInfo.Name, TargetDir + '\' + DirInfo.Name);
{$IF DEFINED(WIN32) AND DECLARED(UsingVCL)}
if ((DirInfo.Attr and FaDirectory)<>FaDirectory) and ((DirInfo.Attr and FaVolumeID)<>FaVolumeID)
{$ELSE}
if ((DirInfo.Attr and FaDirectory)<>FaDirectory)
{$IFEND}
then CopyFile(PChar(SourceDir + '\' + DirInfo.Name), PChar(TargetDir + '\' + DirInfo.Name), false);
DosError := FindNext(DirInfo);
end;
SysUtils.FindClose(DirInfo);
end;
procedure Tfrmdbout.Button1Click(Sender: TObject);
begin
openDialog1.Execute;
edit1.Text:=openDialog1.FileName;
end;procedure Tfrmdbout.BitBtn2Click(Sender: TObject);
begin
edit1.Text:='' ;
edit2.Text:='';
close;
end;procedure Tfrmdbout.BitBtn1Click(Sender: TObject);
var
// i : integer;
OpStruc: TSHFileOpStruct;
FromBuf, ToBuf: Array [0..128] of Char;
begin
//对文件进行输出
FillChar( FromBuf, Sizeof(FromBuf), 0 );
FillChar( ToBuf, Sizeof(ToBuf), 0 ); StrPCopy( FromBuf, Pchar(edit1.text) );
StrPCopy( ToBuf, Pchar(edit2.text) );
// 设置OpStruc
with OpStruc 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( OpStruc ) <> 0 then
begin
MessageBox(Handle,'文件备份失败!','[系统文件备份信息]',MB_OK+MB_ICONINFORMATION);
close;
end
else
begin
MessageBox(Handle,'文件备份完成!','[系统文件备份信息]',MB_OK+MB_ICONINFORMATION);
end;
edit1.Text:='' ;
edit2.Text:='';end;procedure Tfrmdbout.Button2Click(Sender: TObject);
begin
saveDialog1.Execute;
edit2.Text:=saveDialog1.FileName;
end;希望对你有所帮助!