小新技术网WWW.XKER.ORG 学无止境,我们永远在路上。在路上,是生命的远行,是为温暖身边人!
操作系统 - 编程开发 - 聊天软件 - 网络 - 站长之家 - 工具软件 - 办公 - 图像动画 - 安全 - 网页设计 - 硬件 - 服务器 - 存储 - 手机 - 资讯 - 下载
您现在所在的位置:小新技术网 > 编程开发 > 浏览内容:在Delphi中实现对目录拷贝、删除和搬移的操作

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

小新技术网 XKER.ORG 2008-11-21 来源/作者: 收藏本页
 笔者在工作中遇到了需要对目录进行拷贝、删除和搬移的需求,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;

共2页: 上一页 [1] [2] 下一页
【重要声明】:小新技术网刊载此文仅为提供更多信息目的,并不代表小新技术网同意文章的说法或描述,也不构成任何建议,对本文有任何异议,请在下面提出建议。
发表意见(提示:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。)
  • 排行
  • 推荐
  • 最新