如何复制文件夹(下所有文件)到另一个目录? ( 积分: 100 )

  • 主题发起人 主题发起人 高坡
  • 开始时间 开始时间

高坡

Unregistered / Unconfirmed
GUEST, unregistred user!
想复制文件夹(所有文件)到另一个目录,就是想实现文件备份的功能,不知道如何实现,只是知道复制单个文件,是不是要列举此目录下所有文件然后再复制?太麻烦了吧,为什么‘全文检索’功能不能用了?
 
//拷贝目录
function DoCopyDir(sDirName: string; sToDirName: string):Boolean;
var
hFindFile: Cardinal;
t, tfile: string;
sCurDir: string;
FindFileData: WIN32_FIND_DATA;
begin
//先保存当前目录
sCurDir := GetCurrentDir;
ChDir(sDirName);
hFindFile := FindFirstFile('*.*', FindFileData);
if hFindFile <> INVALID_HANDLE_VALUE then
begin
if not DirectoryExists(sToDirName) then
ForceDirectories(sToDirName);
repeat
tfile := FindFileData.cFileName;
if (tfile='.') or (tfile='..') then
Continue;
if FindFileData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
begin
t := sToDirName + '/' + tfile;
if not DirectoryExists(t) then
ForceDirectories(t);
if sDirName[Length(sDirName)] <> '/' then
DoCopyDir(sDirName + '/' + tfile, t)
else
DoCopyDir(sDirName + tfile, sToDirName + tfile);
end
else
begin
t := sToDirName + '/' + tFile;
CopyFile(PChar(tfile), PChar(t), True);
end;
until FindNextFile(hFindFile, FindFileData) = False;
FindClose(hFindFile);
end
else
begin
ChDir(sCurDir);
result := False;
exit;
end;
//回到原来的目录下
ChDir(sCurDir);
Result := True;
end;

//拷贝目录
function CopyDir(sDirName: string; sToDirName: string): Boolean;
begin
if Length(sDirName) > 0 then
Result := DoCopyDir(sDirName, sToDirName)
else
Result := False;
end;
 
使用 SHFileOperation
API函数
 
可以用 shellapi 中的 SHFileOperation

uses shellapi

SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);

这个函数功能很强大,除了复制之外也可以移动、删除文件/文件夹。相当的方便

-----------------
procedure TForm1.Button2Click(Sender: TObject);
var
OpStruc: TSHFileOpStruct;
frombuf, tobuf: Array [0..128] of Char;
Begin
FillChar( frombuf, Sizeof(frombuf), 0 );
FillChar( tobuf, Sizeof(tobuf), 0 );
StrPCopy( frombuf, 'd:/brief/*.*' );
StrPCopy( tobuf, 'd:/brief1' );
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;
ShFileOperation( OpStruc );
end;
 
这里面的全文检索功能不能用了, 真是麻烦,我最后还是在DElphi找到的答案,nicai_wgl是不是也搜索到的代码?Dong_HC功力还比较深厚,多谢了,有人知道怎么大码实现MYsql数据库服务的停止和启动吗?
 
后退
顶部