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

在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;

Instagram 5位传奇工程师背后的技术(PPT全译) Google云计算专家Jeff Dean与Sanjay Ghemawat获ACM Infosys基金会大奖 谷歌承诺不对开发、发行和使用开源软件的人专利诉讼 Web框架排行榜 Netty、Servlet和Vert.x位列前三 DARPA慷慨解囊的背后:Python与大数据的火花 研发周报:神奇!1KB JavaScript代码编写的3D蜜蜂 移动周报:65岁传奇Android工程师谈开发 “部落战争”开发商Supercell融资1亿美金 投资公司争先恐后 Kiip 90后华裔励志故事:从遭解雇到誉满全球 大数据基因测序的成本逼近1000美元:个性化医疗的时代来临 携程开放平台发力 将实现旗下产品全流程API支持 Puppet labs发布2013自动化运维报告 “国”字号开发者:航旅纵横负责人薄满辉专访 金山云杨钢:核心算法保证安全和低成本 加速软件交付 企业级模拟测试服务CA LISA受追捧 盛大云业务重点转向自服务 转战中小型企业:Prediction API请求一个月内飙升至7亿多次 利用光子 耶鲁大学研究人员让量子计算机离现实更近一步 技术为王的云计算会让IT部门消亡么? 从Discuz到APP:安米移动社区转化工具 覆盖全领域:Google、Facebook、Twitter等大师的最佳推荐 苹果CEO宣布更改保修政策 并向中国用户道歉 拒绝使用现有Web组件的6个愚蠢理由 Github宣布支持SVN方式访问 iPad,正在改变什么? Go Mobile:行业大牛谈行业应用开发 亚马逊Cloud Drive新增文件同步功能 对抗Dropbox 35万奖金发放,BlackBerry 10大赛奖项揭晓 超越Google Apps:排行榜前10的相关云应用 荣耀终将消散 全球第一台千万亿次级超级计算机退役 谷歌已推免费Android和iPhone版Quickoffice,微软你呢? 怎样使自己的程序被安装的时候安装上自己制作的字体?? 求助:帮小妹找份工作 有高手在吗?帮帮忙! 一个在ASP中很简单的问题 很想很想很想散分 预报天气如“叫床” 湖南性感女主持惹争议 Websnap中TEnduserSessionAdapter组件的TadapterField问题~~~~~~~~~~~~~~~~~~~~~~~~~~ 急!!帮我看段代码! 为何对话框程序加入RichEdit控件后不能运行? 想知道word.application的朋友请进: InstallShield Express Custom Editon for Delphi那里有下载? 请问vb.net和vc#能不能创建数组控件??? 请问vb.net和vc#能不能创建数组控件 请问一下,vc 写的 dll,使用postmessage给出一个消息到窗口,在 vb 中应该怎么样响应? 我想开发一个数据中间层但不知哪用.net ATL MFC 开发好,能给个建议吗? 寻求cs CD-key 文件名(很有些困惑!) 高手近来拿分,请教一个算法问题,共开三帖,每帖一百分。 在windows2000+delphi6+ado+access2000做的程序可以在windows98中用吗? 我想学门语言,现在哪种最有前途啊 一个免费的电影网站,不需要手机不需要花钱就能看电影 数据库存储一些记录后不能写入,数据库文件异样(BDE) 急问:这样的文件怎样导入数据库? 一个免费的电影网站,不需要手机不需要花钱就能看电影 IIS下配置php-4.3.2-Win总是不行??? 很多书上都有说jsp:useBean的scope属性的application,是指任何使用相同的application,这个相同是什么意思? 关于统计的问题 马甲识别诸法之我论(转贴) 弱弱地问一个问题。 如何用键盘弹钢琴? ASL是什么? how to 高考 装了win2003之后调试asp.net还要不要再装其它软件? 学c++出路 我把数据库的连接池作到Bean中,麻烦就此产生,请高手帮我解决??? 成熟OA系统,B/S模式,三十几个模块,四十几个功能,超底价出售原代码,包你满意,有意者留个油箱,我把部分文档给你发过去,如果你离南 怎样装微软官方论坛? 成熟OA系统,B/S模式,三十几个模块,四十几个功能,超底价出售原代码,包你满意,有意者留个油箱,我把部分文档给你发过去,如果你离南 win2000安装后,每个一秒种读一次盘,请帮我解决问题。谢谢! 谁还来个高程QQ群? 大家都上过哪些收费电影下载网站? 请问那里有好的中文输入法下载。我的是redhat72 在线等待----100分,急!!! 光标定位问题 asp mail question 一些比较菜的问题 实用问题,在触发器中如何退出? 怎样来通过我的程序来控制另一个程序的下拉菜单 VS 2003哪里有下?VB的GRIDCTRL如何调整各列的宽度? 请问如何把datagrid中的数据到出到Excel中做报表 class发什么音 好的开始是成功的一半英文 英语翻译彼尧舜之耿介兮,既遵道而得路; 何桀纣之猖披兮,夫唯捷径以窘; 惟夫党人之偷乐兮,路幽昧以险隘; 岂余身之惮殃兮,恐皇舆之败绩; 忽奔走以先后兮,及前王之踵武; 荃不察余之 我的音乐课3点结束 my music class --------- ----------- ----------横线怎么填?顺便问下,a与one有什么区别? 翻译英语“好的开始是成功的一半” 英语翻译要翻译,急 Japanes中的a发什么音,class,apple,that也同样如此 father是什么意思 尧舜时九河不治 翻译 五下语文补充习题第1课春光染绿我们双脚最后一题的第2小题 father什么意思 五谷丰登,自力更生的近义词 给幼儿讲故事时要注意什么? 请问酒店里常说的"french suite"一般的中文译名是什么? 丰收的近义词 好的开始是成功的一半用英文怎么说?还有..留着青山在,不怕没柴在有志者事竟成只要决心大,天大的困难都不怕 original French onion soup请翻译 函数y=sinx+√3cosx在区间[0,π/2]上的最小值为化简到y=2sin(x+pai/3) 叮咛的近义词 证明(a-1)(a²-3)+a²(a+1)-2(a³-2a-4)-a的值与a的值无关. 伯牙绝琴的绝是什么意思? 英语翻译热头盆 煎法国鹅肝伴苹果 20.00 元 French Foie gras fried with apple 20.00冻头湓 西班牙火腿拼密瓜 48.00元 香芒汁带子冻 8.00 元 热汤 酥皮大虾忌廉汤 25.00 元 酥皮蜗牛汤 20.00元 农夫鲍鱼忌廉 大海大海你为什么这么蓝?这句话采用了什么表述方法 妙语连珠怎么造句?还有高谈阔论、眉飞色舞?是要分开早的,特急, 英语翻译WESTERN “Soup of the Day” CHINESE “Soup of the Day” CREAM of POTATO with CHOPPED BACON 你是法国人吗?怎样翻译?French前面用冠词的话是a还是an? THE THEATRE AND ITS DOUBLE怎么样 用“视”组词 和 写句子.用视组词:( )视 组10个春节的时候,在热闹的爆竹声中,送走了旧的一年.春风吹来了,非常温暖.人们喝着美酒沉浸在欢乐中.由此,我们想到宋朝王安石的两句诗:— 打电话 哪些句子把你笑了 给我一个承诺,是什么意思 幼师面试时应该如何介绍自己 关于打电话想句口号单位提倡节能,上句是:上班不煲电话粥下句应该写什么?最好押韵,恩,我的意思是下句也关于打电话长话短说的意思. 我爱你直到永远是什么歌?里面有神话和诺言四个字,请问这是什么歌词,结婚时候放的 为什么现在的我这么浮躁过了年 又开始了这无聊的工作 我现在什么也不想干 特浮躁 心里很乱啊 真的想换个工作环境 可不知道还能去哪 真的挺烦的 叮咛的近义词是什么 这个可以做了吗?保证给分我发4. 不屑一顾是什么意思? 英语翻译1 我给她打了两个电话 这么翻译行吗?I called him twice 如果可以 再给同义句2 你今天给她打了几个电话?3 我给她 打电话了,可是一直没人接4 我打电话给她了,她手机关机了英语翻译 5 他 英语填空题,看不清的问我? 初二地理求解,第8、9题该怎么做?求详细解答 She was at the museum(on Wednesday morning.)对画括号部分提问 地球上海洋总面积是三亿六千二百万千米,写作362000000平方千米,改写成以亿平方千米为单位是( ). 不屑一顾的意思请回答 The trip to the Palace Museum was (really wonderful) 对括号部分提问 化学四个填空题 看不清的问我 叮嘱的近义词是什么 as soon as as soon as 2013山东文综地理第一, It___boring.A:sound B:sounds C:watch D:watches 给句子换个说法1 我回到了故乡小镇.2汤米,我要到另一个世界去歌唱. 五谷丰登的近义词准确点. 关于形容词作定语the design for the room was of the fancy style popular in those days.这里popular in thouse days是形容词短语做定语吗?为什么polular前面不用家be动词?形容词前可以不加的吗? as soon as 如题 丰收和匆匆的近义词各是什么 2012江苏省姜堰市的初中地理,生物会考成绩怎么查询? 照样子把句子换个说法.例:马跑得越快,离楚国不就越远了吗?马跑得越快,离楚国就越远了.1、 画画怎么能不相信自己的眼睛呢?2、 楚国在南边,你怎么能往北走呀?3、父母养育了我,我怎么能 讨厌,丰收的近义词 近义词、叮咛——……?、依旧——……? 照样子,把句子换个说法.例:密密层层的枝叶挡住了阳光。阳光被密密层层的枝叶挡住了。密密层层的枝叶把阳光挡住了。1、拦河大坝拦住了奔腾的黄河水。2、他按照规则传递口令。 博施济众 尧舜犹病~谁能帮我翻译下?出自孔子语录? 美撤军前在阿富汗军事成果受侵蚀 安全阿富汗政府被曝将在美撤军后与“基地”乐高拟在韩建东亚首座乐高乐园 预计斯诺登爆料NSA早已入侵了雅虎和谷歌以色列释放26名巴勒斯坦犯人 亲人兴印尼一处豪华别墅内被发现暗藏多种珍禽研究称英国社会阶层八百年来几乎未发生韩国海域15日沉船事故一失踪中国船员《世界新闻报》窃听案8名被告中有3人日国会议员山本太郎向天皇递交书信 或美媒称奥巴马支持率跌至新低 挫折积累印尼一处豪华别墅内被发现暗藏多种珍禽德国两大党举行第二轮谈判 部长人选仍南非“刀锋战士”谋杀案再添非法持有弹韩国防部:无计划推动签署韩日军事情报美国安局总监否认曾非法窃取谷歌和雅虎朴槿惠11月初将访欧 拟拉动韩欧创造《福布斯》主编:普京因在外交发挥关键福布斯全球权力榜安倍仅排第57 不如日本航空自卫队一空士长因偷窃被予以免为躲避意大利繁冗昂贵程序 180对夫大盘是休整 还是蓄势待发姑娘们为了自拍你也真是蛮拼的9月29日早间重要财经资讯汇总国外犀利哥偷拍姑娘50年,震惊全球!哈爸:妈妈如何最低成本创业?承受痛苦也不愿放弃信仰的传说盗贼心得强强联手,万科、万达将开启战略合作日本雪藏惊人隐实力,看完你怕了吗?国庆节系列活动开启 精美婚纱带回家刘永好杀入智能硬件,新希望跨界“奶粉新一期幻象副坦 黑暗小丑站位顺序分析从一个男人的角度告诉你:什么是幸福的华夏银行给微众银行授信20亿元,双方正确食用上古神兽会有些什么功效?金融 | 外汇占款第三次环比负增长 抢滩“医药物流市场”:阿里巴巴结盟默全民突击灰度服测试公告1.9.0 体16家上市银行深度比较分析4月“宏观经济数据”解读:“稳增长”拍云的时候【夜读】管清友:央行,为什么要介入“
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘