说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
在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;

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中获取和修改文件的时间 在Delphi中控制扫描仪 在Delphi中实现对WIN9X应用程序使用权限的设置 在Delphi中实现对目录拷贝、删除和搬移的操作 在Delphi中使用自定义光标 在Delphi中用拼音首字符序列来实现检索功能。 在DELPHI中用线程排序 在Delphi中制作背景音乐 在Dephi中使用TStream读写数据的技巧-Delphi资料 在应用程序中跟踪MOUSE的坐标-Delphi资料 怎样建立回调函数-Delphi资料 怎样显示自定义鼠标光标(Cursor)-Delphi资料 找出消失的 Delphi 窗口 执行外部程序-Delphi资料 执行一程序并等待其结束-Delphi资料 制作一个不在任务栏及任务列表中显示的幽灵程序-Delphi资料 抓获全屏-Delphi资料 子目录级的文件查询的实现-Delphi资料 Delphi中ChartFX构件使用详解 Delphi中动画设计 Delphi中对Jpeg格式文件的处理... Delphi中多媒体组件使用解析 Direct3D起步:教程以及资源指南-Delphi资料 播放背景音乐-Delphi资料 弹出、关闭CD-ROM驱动器-Delphi资料 检测声卡存在-Delphi资料 控制声音音量-Delphi资料 让pc speaker美妙动听-Delphi资料 闪动标题栏-Delphi资料 使用 DirectX 优化声音特性-Delphi资料 修改Delphi 3图形处理中的错误 c语言基础问题 上海的朋友!请进来说说如果你/*未来*/女朋友或男朋友第一次来上海,你会带他或她去哪些地方玩??有七到十天时间 请问长时间用光驱放DVD会不会损伤硬盘? 急救 vj6 中如何调用sql数据库 谁能告诉我早期LINUX内核的源代码和C编译器的源代码,哪能找到!谢谢! DB2安装问题 有谁知道北京数字证书认证中心是干吗?他们说的什么信息加密、网上作业身份识别、BGC是什么回事?跟服务器有关吗? 在SQL Server中导库时出现DLL错误,怎么回事 将int型转化为字符型用什么函数? 谁能告诉我早期LINUX内核的源代码和C编译器的源代码,哪能找到!谢谢!要多少分都给! 500分求菜单功能。 很急的问题!希望大家帮忙! jb8中类找不到了??? 请教高手:如何让label显示在text、button等的上面? 新手请高手帮忙了~~~ 谢谢~~~ 500分求菜单功能。 修改数据,提交保存老报错,纳闷~~~ 急!在RED HAT LINUX中怎么配置POP和STMP服务器? 散分呵呵 是真还是假,群众的眼睛是雪亮的! 求助:XP和2003双操作系统,XP用PQ分区后在2003里找不到? 500分求菜单功能。 treeview控件,如何让其点击结点后再从数据库中取得这个节点的下一层节点? 如何在SQL SERVER 2000导入mis.bak文件? HELP!一道规划问题的优化!源代码 虚心的小弟,散分(分不多) 在线等待!!sql 无法登陆 500分求菜单功能。 用VC写的dll在vb上怎么用? 这样的sql 怎样写 WIN2000和LINUX与APACHE的搭配的困惑 高分求助,各位进来帮一帮吧,有问题请教,急,急!!! 找不到包在线等 我就不相信CSDN没有高手,帖出代码求救!!! 在服务器端监视客户记录 怎样使用vc+soap kit调用web service,麻烦添加注解! 中国科普之我见(普鲁日尼科夫),一种局外人难得的评说,你一定要看! 怎么找到这个东西 jScrollPanel.getViewport这个里面的getViewport代表了什么?Viewport的作用是什么?谢谢 ███请问,如何判断"\\192.168.0.123\temp"这个目录是否存在?███ 谁可以告诉我如何通过msflexgrid实现查询? 高分相给! 迷茫啊................ 大家来看看1997--2002的历届Jolt震撼大奖名单~ mmqm.exe 篡改IE的问题。给分!! EJB设计模式.实战EJB.精通EJB......等等----一个超好网址 简单快速 资源不敢独占 拿出来分享 如何实现打印功能? 怎样才能填充由两条贝塞尔曲线围成的封闭区域,谢谢了 请教关于数据库连接的问题 在sstab控件上怎么动态添加控件! ★★★★★★应邀申请[专题开发]版主,谢谢大家支持!★★★★★★ 通过代理(采用XP自带internet共享)上网的奇怪问题! 请问这里的导数算得是不是错的? 怎么写?写少点. 怎么写? 已知抛物线y=-2x^2+mx+n的顶点坐标为(1,2).(1)求抛物线的解析式(2)求抛物线与坐标轴的交点坐标 写词语,赚东东!近义词:殷勤--( ) 踌躇--( ) 探访--( ) 风度--( ) 深远--( ) 抗议--( ) 捉摸--( ) 清晰--( ) 身段--( ) 幻觉--( ) 造就--( ) 幽静--( ) 反义词:殷勤--( ) 踌躇--( ) 细腻--( ) 温柔--( ) 柔弱--( ) 空旷 (急)求写赞美梅利号的话和句子还有说一些什么关于它的东东同上 词语之星咳咳~词语之星各种各样的“走”___ ___ ___ ___ ___ ___(六个)各种各样的“笑”___ ___ ___ ___ ___ ___(六个) 滑水运动员在水面上为什么不下沉? 为什么D对B不对 四、(10分)请说明(0,1)、[0,1]和S1是两两不同胚的(三者皆赋予欧氏度量) A,B两地相距48千米,小王汽车从A地出发到B地,后再返回A地,在回来的路上他先用去的速度骑行2小时A,B两地相距48千米,小王骑车从A地出发到B地,后再返回A地,在回来的路上他先用去时的速度骑行2 军事专家:极易致误判误撞和擦枪走火冷战游戏 蓦然重现空气污染致癌 波兰向碳排放开刀斯诺登谋得俄网站工作禁化武组织:叙利亚已按规定销毁化学武美国辱华电视主持人称不会辞职 未答应“免费”医疗让俄罗斯进退两难 仅约3上海自贸区改革红利初显 打造宽进严管报告称撒哈拉以南地区明年经济增速将达学者解析温家宝首次出书谈教育:出身教山东菏泽回应城建局集体打牌:6名员工Facebook收购语音识别初创公司官方:舜天宣布高洪波正式辞职三星对Galaxy S6 Edge今广州国企混改新动向:拟成立百亿基金搭没有一个民族天生残暴杨卫泽落马,三大谜团怎么破?御龙在天新版三国志开启 体验真实战国\"两桶油\"混改将深化 石油上游勘斯图里奇继续留美复健,情况良好快讯:机场航运早盘强势 中国国航封板土豆炖鸭仙临妖孽歌我的变形金刚兄弟蜀山绿袍重生之剑行天下人型服务端汉末风云之大夏帝国兵魄武尊重生之不再做女生帝高阳星农环球动漫嬉戏谷旅游浅水湾旅游百山祖旅游南溪村旅游天堂山旅游黄茅尖旅游凤阳山旅游源头村旅游武汉博物馆旅游太平街旅游松江辰山植物园旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘