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

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

云计算一周热点回顾:Hadoop专家分享大数据技术工具与最佳实践 Python之父Guido Van Rossum离开谷歌 一月加盟Dropbox 图灵奖获得者Butler Lanpson:计算机在做些什么 华为高级技术经理Anoop Sam John:HBase的二级索引 秦令今:技术是竞争的核心,形成自己的特色! 兰旭:拒绝同质化,做自己的真材实料! Cloud Foundry直面PaaS对手 初具商用能力 IndieBros访谈:探寻《2+18+200万》背后的故事 移动周报:生存还是毁灭 HTML5未来路在何方? 开发者的新机遇:微软生态系统打开开源大门 阻碍创新:谷歌、Facebook请求驳回抽象专利概念 Apple专利战分析:战火不停 创新不止 史上最牛独立开发者:花20美元狂赚100万美元 Twitter VS. Instagram:照片分享大战爆发 第二届“龙芯杯”中国开源软件设计大赛圆满落幕 TUP Masters第六期实录:Jeffrey Richter讲解Win8应用开发与.NET4.5 [简讯]Bootstrap 2.2.2发布 官博宣布新特性 我们正处于API的黄金时代吗? 敏捷开发的26条至理名言 12月10日:1815年首位程序员Augusta Ada出生 TOP30+应用排行榜:十一月国内外综合榜单 抱大腿:Square礼品卡服务进驻Passbook 科技创新剑指开源产业 “龙芯杯”破题自主研发 25GPU的Linux集群6小时内破解标准Windows密码 Lady Gaga与大数据的“火花” 手势才是王道:3款应用捕获3个设计灵感 YouTube的挑战者 JustinTV教你如何打造实时视频网站 黑客挟持160万用户密码 抗议联合国监管互联网 Twitter面对危机火速上线照片滤镜产品 Nike推创业孵化器:每个参与团队获2万美金 傲游发布云浏览器 支持跨终端数据同步 请问各位大哥,上海的高程考试在哪里报名啊? dcom 服务器关闭时怎能捕捉异常 三戒,有请~~~ 谁知道websphere的试用版怎么做掉? 打印DataReport时怎样用API改变系统的纸型,急急急急急急急急急!!!! 新来的~~来报到了~~只能送20分~~希望大家不嫌弃~~ 请成功使用JBuilder5的朋友指教!! 激情放送 五位QQ号,100块,你会要吗? 555~~~~挂了PASCAL挂了,5555~~~~我学不好DELPHI 了5555谁帮我呀!!! 有编过游戏修改器的高手吗? jinesc领分~~~ 如何使UpDown每次增加或减少0.5? 有个问题很困惑,请教 上傳后,服務器端如何接收? 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!! 我快神经了,求救 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!!! 别笑我傻,又有简单问题 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!! 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!!!!!!! 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!!!! 大家都谈谈建立什么样的目录结构能更好的管理硬盘里的东东 lilo 如何设置??请赐教!! 各位高手好!现在有谁是正在使用 LINUX 上网的.报一下好吗!!!!!!!!!!!1 mts是什么? mts是什么?? 学习汇编要什么基础,要看什么样的书,有没有好的汇编的电子参考书下载呢? 腾讯的qq怎么不好用了? 有CCNA,Scjp2,高程的计算机本科生能卖多少?(答者有分,只能给33分,没办法) word的表格问题 如果开另外一个线程来进行注册码检验,是否比较难CRACK? 请问高程考试考试的难度 怎么让程序启动的时候接受参数? mts是什么??? 我也调查:这里有多少冠名以“独孤”的,为何独孤???? 菜鸟SOS 个人论:编写程序方法论(原作者,huangbeyond) 向流版主学习,戒网!戒网!成天在网上瞎转,不如下去加强学习,碰到问题再上网寻求答案,天天在网上泡得久了,看到各大PB网站的编程技巧都有些视而不见了.....到PB论坛很多人都象到自己喜爱的聊天室了,到论坛好象就是来聊天一样.....戒网!戒网! 如何编写一个集成Ms Word的控件,能够处理WEB上的文件排版 怎么不能下载呢? 我是女孩,有人信吗??嘻嘻~~ 谁知道关于用vc编游戏的书,请各位大虫们介绍介绍好吗?谢谢了!!!!!!!!!! 有关sql server不能显示中文啊?? 关于B/S动态刷新问题 想不到,摩机三年今天居然栽了 beginpaint函数有什么用? 在PowerBuilder中怎么才能得到当前程序运行的路径? Sybase PowerDesigner v7.5 的中文学习材料谁有? 哪位大虾能够作一个查看游戏图片的辅助工具 请问casl汇编和asm有什么不同??谢谢!!!!!!!!!!111 英语翻译 虞世南的咏风译文? 英语翻译National laws shall always take precedence over International guidelines.Cases made to International courts are likely to give precedence to a combination of the OECD Recommendation and either the European Data Privacy Directive or APEC P 王勃故事 文言文 急 英语翻译A star has 5ends;A squar has 4 ends; a triangle has 3ends; A linehas 2 ends; Aends;lifehasoneend.Butl hope our friendahip 英语翻译请帮忙翻译这段话:The $47.3 fee is a DHL charge for Quarantine processing carried out by Department of Agriculture,Fisheries and Forestry(DAFF).When shipments are inspected ,DAFF charges DHL for the quarantine inspection services 文言文 王勃故事 哪位好心人帮我把以下英文翻译成汉字Cat and rat live in a forest. Every summer, there is an animalrace in the forest. Cat ang rat join the race. Rat says toCat“I know a path. You can follow me.”So Cat runssays, “Let’s have a r 英语翻译If boy wizard(巫师) Harry Potter uses his magic to capture(迷住) the hearts of millions of teenagers,high school students Gabriella and Troy have charmed American boys and girls with their stories of campus life.They are the leading c 天气变冷了 英汉互译 文言文 王勃故事 的题 几句英语翻译 急!好心人帮忙!吃太多的甜食容易使人发胖.(likely)饭后散一会儿步有益健康.(do good to ) 大量砍伐树木已经对生态平衡带来了严重影响.(upset) 照看婴儿是一项很累的活.(task) 听 天气变冷了 用英语怎么说 It is 《王勃作》译文我不要滕王阁序的译文,我要的是《王勃作》这篇的译文,是写王勃在写《滕王阁序》的过程等等的那篇古文啊~OK? 英语翻译Hello seller,My Name is Mrs Jessica Morris,I want to make an urgent purchase of your item pasted on Yahoo Auctions for my Uncle in Nigeria,i will offer you the sum of $1,500.00 USD including the shipping cost via EMS SPEED POST.kindly get 用英语翻译 :这的天气突然变冷, 《唐才子传》王勃的译文?开头是:勃子子安,太原人,王通之孙也.百度上的那个不一样的~不要复制过来,请看清楚了再回答! 英语翻译It is the rarest thing in the world to hear a rational discussion of vivisection.Those who disapprove of it are commonly accused of “sentimentality,” and very often their arguments justify the accusation.They paint pictures of pretty 英语翻译英语翻译:如果吃药之后还没好,我就带你去医院看病. 王勃故事(简短) 英语翻译Such development are possible .mobilizing the power of information technology ,some firms(eg,Moskowitz Jacob ,inc)have developed design labs that obtain consumers’ reactions to concepts and products and provide immediate,direct and 英文翻译:你需要带上一些衣服,因为在这个天气去山上,早晚有点冷 王勃故事 现代科学研究发现:人除了头部大脑外,还有一个大脑藏在肚子里,称为“腹脑”.换句话说,你再也不能像过去那样将肚子简单地视为“酒囊饭袋”了.它是你的“第二大脑”.那么,造 英语翻译 英语翻译chicking file system on E最前面这个chicking是不是指系统的某个文件名呢? 英语翻译王勃著《腾王阁序》,时年十四.都督阎公之不信,勃虽在座,而阎公意属子婿孟学士者为之,已宿构矣. 英语翻译So i want to tell me if you have the previous selection in your stock on the right SIZES that i ask you atd those three new selection.and i want to tell me do you have all the others in follow sizes? 英语翻译Happy birthday to a special friend!Although I haven't known you many years,Perhaps because you've dried so many tears,Pleasure reigns as I these greetings send.Your happiness should last till all things end!Because you've been so sweet an 英语翻译王勃著《滕王阁序》,时年十四.都督阎公不之信.勃虽在座,而阎公意属子婿孟学士者为之,已宿构矣.及从纸笔巡让宾客,勃不辞让.公大怒,拂衣而去,专会人伺其下笔.第一报云:‘南昌 英语翻译请你原谅我的失误,你所购买的产品已经缺货,现在我提供一些相似产品的照片供你选择.我希望能够在星期一把你的货发出去. ha ku na ma ta ta 翻译成中文是什么意思?我这个人是个英文盲. 求王勃《滕王阁序》的原文以及翻译 英语翻译1.Like many people,I have no clear idea about heroes.At some point,we all wonder if we need a hero and what a hero really is.2.A hero does something worth talking about.A hero has a special story to tell and people think highly of it.But 英语翻译you never know until you try you uever know until you try and you never try unless you really try you give it your best shotyou do the best you can and if you've done everythingin your power,and still fail_the truth ofthematter is that yo 英语翻译看见机 英语翻译中文,要人工翻译You can see that we are ordering nearly every two weeks so I want you to give me good prices. I want you to send me links for women and babies with long sleeves. My wife and my daughter are waiting for your response 在中文里它的发音是ta.翻译成英文 英语翻译求翻译:滕王高阁临江渚,佩玉鸣鸢罢歌舞.画栋朝飞南浦云,珠帘暮卷西山雨.闲云潭影日悠悠,物换星移几度秋.阁中帝子今何在?栏外长江空自流. 英语翻译Sales volumeMarket shareProfitDealer ordersComplaintsCompetitors Close my eyes and feel your mindTime has passedI walk like a shadowNever knewWhat I am going throughYou touch my heart and take my breath awayWhisper on the wind so softlyLet the bright stars fill out dreams with loveReach for your hand (you re holdi 王勃展才 翻译 英语翻译Open the Front cover,then replace the Toner carthidge Witna New one 英语翻译它叫做——pet girl 诗歌鉴赏王勃《咏风》的答案 英语翻译Please note that the transcript of records should include information on the grading scale used at the institution.The document explaining the grading scale should preferably be issued by the awarding institution and be officially certifi 英语翻译 《咏风》王勃.这首诗整体上运用了什么表现手法,表达了诗人怎样的情感如题 英语翻译由于上海正在举办世博会,出于安全措施,对液体【香水属于液体】稽查的的特别严格,我为了能够让您早点收到货物,已经重新发货给您,并且绕道另一个城市【广州】出关.由于发送液 英语翻译 《咏风》 王勃 鉴赏 要短一点的,100来字左右,要短一点的,查到的都太长!100字就够了!答得好有的加分! 英语翻译The sun goes downThe stars come outAnd all that countsIs here and nowMy universe will never be the sameI'm glad you came... 以下英文翻译成中文这是啥意思giankangshenghuoyacheengde? 咏风 王勃此诗的余味 英语翻译如果你想得到商品,请您支付我50USD的运费,或者购买不低于100USD的商品. 英语翻译1.One pair of platinum and diamond jewelery2.a surprise gift3.A group of special envoy4.A mysterious lucky5.A beautiful story,a love song for some exciting6.Wearing a white wedding the bride7.She is the world's most beautiful bride8.At th 《咏风》王勃这首诗的“诗眼”是哪两个字?请简要分析. 英语翻译提示信息尊敬的EMS客户:首先非常感谢您选择和信任EMS.最近因欧美部分地区受降雪、冰冻等灾害天气影响,导致航班延误或者取消,甚至地面交通瘫痪.受影响较严重的国家和地区有: 英语翻译Ofcourse,in a company that’s grown from three employees to 10,000 and from zerovalue to hundreds of billions of dollars in about five years,it may bequibbling to talk about “problems”,but there’s no doubt that such rapid growthdoe 《咏风》王勃 (1)这首诗写“风”,主要用了什么修辞手法?请简要分析其表达作用. 英语翻译货物已经发出,航空小包是无跟踪查询信息的.前一段时间由于欧美出现雪灾.导致一些邮件延误.现在情况已经好转,相信你很快就会收到货,请您耐心等待.我已经到邮局做书面查询,结
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn