Delphi知识中心
www.delphi.ee
提供Delphi技术知识
与Delphi程序员共同进步


在线服务QQ:99923144 随时恭候您的光临
首页 基础知识 WIN系统 组件使用 组件开发 数据库 ACTIVEX 多媒体技术 网络技术 关于
文章类别:WIN系统    你尚未登陆,会员功能无法使用,请从 网站首页 登陆。
  实现对目录拷贝、删除和搬移的操作  
 

在Delphi中实现对目录拷贝、删除和搬移的操作

笔者在工作中遇到了需要对目录进行拷贝、删除和搬移的需求,Delphi本身提供了一些目录操作函数,但只是针对空目录而言,对目录下带有子目录的情况,更是无能为力。

利用Win32 API函数和结构,以及递归的程序设计思想,笔者实现了对任意目录进行拷贝、删除和搬移的功能(分别相当于DOS中的XCopy、DelTree和Move命令)。以下分别给出了实现代码: 

1、拷贝目录 

为了能拷贝目录下带有子目录的情况,先定义一个辅助的拷贝函数,它是递归执行的,直到把目录下的所有文件和子目录都拷贝完。

1.1拷贝目录的递归辅助函数:DoCopyDir 

function DoCopyDir(sDirName:String;
sToDirName:String):Boolean;
var
  hFindFile:Cardinal;
  t,tfile:String;
  sCurDir:String[255];
  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;

 

在线服务QQ:99923144 Delphi程序员QQ群(139442)
Delphi知识中心 www.delphi.ee 最专业的Delphi技术资料网站