关于超想
本站导航
邮件列表
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
你所在的位置 -> 主页 -> 超想软件 -> 编程资料 -> delphi -> 开发技巧 -> API相关 ->详细
相关内容  
 
 
在程序运行期设置QUERY控件的PARAMS
 
【新品推荐】

  详细内容
 

在Delphi中实现对目录拷贝、删除和搬移的操作
作者: 吴成宾 评价: 上站日期: 2001-05-09
内容说明:
来源:

  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;
1.2拷贝目录的函数:CopyDir 

function CopyDir(sDirName:String;
sToDirName:string):Boolean;
begin
   if Length(sDirName)<  =0 then
     exit;
   //拷贝...
   Result:=DoCopyDir(sDirName,sToDirName);
end;
2、删除目录 

删除目录与拷贝目录很类似,但为了能删除位于根目录下的一个空目录,需要在辅助函数中设置一个标志变量,即:如果删除的是空目录,则置bEmptyDir为True,这一句已经用深色框表示了。 

2.1删除目录的递归辅助函数:DoRemoveDir 

function DoRemoveDir(sDirName:String):Boolean;
var
  hFindFile:Cardinal;
  tfile:String;
  sCurDir:String;
  bEmptyDir:Boolean;
  FindFileData:WIN32_FIND_DATA;
begin
  //如果删除的是空目录,则置bEmptyDir为True
  //初始时,bEmptyDir为True
  bEmptyDir:=True;
  //先保存当前目录
  sCurDir:=GetCurrentDir;
  SetLength(sCurDir,Length(sCurDir));
  ChDir(sDirName);
  hFindFile:=FindFirstFile('*.*',FindFileData);
  if hFindFile<  > INVALID_HANDLE_VALUE then
  begin
    repeat
       tfile:=FindFileData.cFileName;
       if (tfile='.') or (tfile='..') then
       begin
         bEmptyDir:=bEmptyDir and True;
         Continue;
       end;
       //不是空目录,置bEmptyDir为False
       bEmptyDir:=False;
       if FindFileData.dwFileAttributes=
       FILE_ATTRIBUTE_DIRECTORY then
       begin
          if sDirName[Length(sDirName)]<  > '\' then
           DoRemoveDir(sDirName+'\'+tfile)
          else
           DoRemoveDir(sDirName+tfile);
          if not RemoveDirectory(PChar(tfile)) then
           result:=false
          else
           result:=true;
       end
       else
       begin
          if not DeleteFile(PChar(tfile)) then
           result:=false
          else
           result:=true;
       end;
    until FindNextFile(hFindFile,FindFileData)=false;
    FindClose(hFindFile);
  end
  else
  begin
    ChDir(sCurDir);
    result:=false;
    exit;
  end;
  //如果是空目录,则删除该空目录
  if bEmptyDir then
  begin
    //返回上一级目录
    ChDir('..');
    //删除空目录
    RemoveDirectory(PChar(sDirName));
  end;

  //回到原来的目录下
  ChDir(sCurDir);
  result:=true;
end;
2.2删除目录的函数:DeleteDir 

function DeleteDir(sDirName:String):Boolean;
begin
   if Length(sDirName)<  =0 then
     exit;
   //删除...
   Result:=DoRemoveDir(sDirName) and RemoveDir(sDirName);
end;
3、移动目录 

有了拷贝目录和删除目录的函数,移动目录就变得很简单,只需顺序调用前两个函数即可: 

function MoveDir(sDirName:String;
sToDirName:string):Boolean;
begin
   if CopyDir(sDirName,sToDirName) then
    if RemoveDir(sDirName) then
      result:=True
    else
      result:=false;
end;
 


 
你所在的位置 -> 主页 -> 超想软件 -> 编程资料 -> delphi -> 开发技巧 -> API相关 ->详细
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
声明:本站内容除注明原创以外均从网上摘抄,如有侵权请指明。
  如果您对我们的网站有什么意见或者建议,请与我们联系
powered by 建站易上手- V2.0