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

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

Git远程操作详解 《近匠》iMAG:移动应用快速跨平台开发工具 Facebook斥资30亿美元购Snapchat遭拒后,推Slingshot 全球开发者报告:程序媛崛起,企业应用更赚钱! 土豪经济 E人E本发布首款4G安全手机 内忧外患:Android版FuelBand应用来得太迟? MongoDB 2.6.2 发布,大大改进查询功能 清华毕军&amp;amp;华为马云:SDN是学术和产业都看好的领域 向三星和苹果发难:亚马逊FirePhone 3D手机强势来袭 支付宝移动端与NFC芯片商、手机商合作 推出近场支付产品 Go 1.3正式发布,改进正则表达式! API设计如龙生九子,Tunneling、Hypermedia等更受开发者青睐 NFV+SDN,博科打造开放式网络平台 亚马逊开放双SDK:摄像购物,追踪脸部玩游戏 解析淘宝Hadoop作业平台——宙斯Zeus 亚马逊的心思:要Android不要谷歌 Vuforia SDK全面更新:3.0版可实时生成虚拟场景和物体 Stream SDK:以手为“剪”,随时随地分享精彩内容 一周消息树:惠普研发基于Linux开源操作系统 打造全新计算机 我从谷歌学到的那些事:Toilet文化、代码实验室 对话大神Scott Shenker:从物理博士到SDN&amp;#039;s Uncle 巨头们的又一战:健康数据服务平台 移动应用广告新竞争,Facebook不再一家独大 为什么Fire Phone手机价格不便宜? 老牌播放器暴风影音发力线下与自制内容 APP运营:“小数据”为合理化推送定位 TCL H5TV:回归电视本质,与开发者共赢 烽火星空徐国龙:依托平台,坚持开放与标准,企业移动化快速研发之道 首届bong线上黑客马拉松第一阶段达成! 12支团队晋级 APSys 2014,AMD将发表基于异构体系的DNN实现与评估 PagerDuty实战分析:将MySQL迁移至XtraDB并成功运行EC2 请问怎么样才能开发手机游戏? 那裡有用java寫的小游戲的原馬呀﹗﹗ 请问怎才可以让图象中有网格啊? 高手指教 配机!!求助!!(进者有分啊) 这样简单的程序怎么通不过! session值修改还是未解决。 一个问题? flashget怎么用? 怎么相应动态创建的控件的事件 关于多媒体播放器的问题 快结婚了,可男朋友依旧把前女友的照片当成宝贝,我该怎么办? 建议组织一个水园老五大联盟。有支持的请up ! jspsmartupload上传100M以上的文件报错怎么办? 高分求助! 在那里下载jsp服务器的软件? 大家帮个忙,急寻南京兼职,饿死了 在unix下如何编译自己写好的c语言程序? 有个问题请教 ? 保存电脑技巧的问题。 在linux下怎么使用SAMBA使用windows下面的东西? 菜鸟级问题 我要在com+中间层返回sqlserver服务器的时间,怎么通过sql语句实现? 女友是空姐没有安全感怎么办 有几个概念不清楚, 劳驾哪位给解释一下 在unix下如何编译自己写好的c语言程序? Listbox 拖放的问题!解决就给100分! orical 我的测试连接失败! 小问题,别笑! 新手对指针的理解,大家指点指点,多谢!! 重载问题??? 高分求助! 哪里有截取vpn数据包的代码学习啊??? 怎样写贴子的标题才能吸引大家的注意?举例者一律给分! 关于API 为什么我的资源管理器反应很慢? 南京远志科技公司怎么样,马上要去面试了,请大家谈谈情况 请问这是什么意思 100分马上给 升四个▲了,散分!!!顺便问问那些两个星星的,你们升到两个星星以后的心情是什么样的?会不会有些失落感? 谁知道mediaplay控件 有没有直接到 一段视频文件结尾的方法 用quickstart出现地问题 小弟没写过事务,请教下面这个功能怎么写 万分着急! 在线等候!求和问题 怎么在sql server 的存储过程中调用它的异常处理呢? 劳累了一天了,希望在水园的朋友们今晚愉快:) hub上的uplink口跟其他的有什么区别啊? 为什么灌水圆只有回复数,没有点击数!强烈要求显示点击数!同意的近来投票! 帮帮忙 正则表达式,验证TEXTBOX输入的是手机号码,并且textbox不允许空着。 c#里求y=sin(x)怎样实现的?用什么类? 我司有一台高低温箱是-60度的,想知道这种试验箱温度还能做得更低吗? 细胞生长,核糖体的数量增加,物质交换速率增强为什么错( ⊙o⊙?) 摩尔根是什么 哪些是平移现象?荡秋千是平移现象吗?写字是平移现象吗? 布洛维光学硬度计技术参数是什么? 摩尔根怎么样 高低温试验箱做试验的时候温度怎么控制? 胶黏剂的表面张力越大,表面能越低,粘接效果越好,是这样么? 摩尔根的故事 一个质量为m的带电小球,在竖直方向的匀强电场中水平抛出,不计空气阻力,测得一个小球的加速度为g/3,则在小球下落h高度的过程中.下列不正确的是()A,小球的重力势能减少mgh/3B,小球的动能 LC振荡电路中为何当电容中q最小时,电路中I最大?为何当电容中电量最小时,电路中电流最大?希望从过程分析,不从能量角度 当电容电压大于交流电源瞬时电压时,电容是否会放电吗?我想知道电容在交流电的情况下,其充放电的详细过程?还有其串联回路中的电阻电压变化情况及其波形是怎样的? 有一悬线悬挂质量为m电量为q的带电小球,放于水平向右的匀强电场中,设小球静止时西线与竖直方向的夹角为西塔,求;1该小球所带电的电荷电性 2小球受到的拉力,3 球该匀强电场的场强E图你们 世界上会用流线型下降的鸟是什么 平行板电容器串、并联电压与电源电压各为什么关系?为什么? 我想问矿泉水对人有什么好处? 女性泌尿系统有哪些器官构成 谁知道做害怕意思的shen是哪个字呢? 如题 开姆洛克《220.205》怎么和橡胶粘不牢啊粘住以后很容易就开了粘不牢啊.还有就是6108怎么样啊.金属与胶粘剂粘不牢.铁件上都用砂轮机打磨过. 关于什么EXOmv闹鬼是怎么回事= 看留言说很恐怖所以就特意没看那里,很好奇那个闹鬼的画面是什么?如题 首饰的原料是什么?A、云母B、钻矿C、石英 涂有开姆洛克220的金属与橡胶出现脱离现象是什么造成的吧求求各位大哥大姐们,205做底涂,能举几个实例吗? 请问大家一下在XP中如何计算我写的文章字数 有谁了解的说下吧,感受大伙了劫3 男人硬度问题听同事说她LG刚刚三十六,就经常硬度不够.一开始还行,两分钟后开始软,虽还在里面但是哪种被进攻的感觉一点也不强烈了.男人不到四十真的开始“微软”? 列克纳与开姆洛克有什么区别大面积的金属与橡胶粘结哪种比较合适 谁知道在XP中如何计算我写的文章字数 有谁了解的说下吧, 男,硬度男,23岁,有4,5年的手淫历史,现在那勃起长度有14厘米,但是总是不硬,勃起几分钟之后再无射精情况下就软了,然后经过刺激之后又可以勃起.请问我这是怎么回事,是不是某种病态的开始, 氢氧化钠和氯化铝的问题向a mol NaOH溶液中逐滴加入含b mol AlCl3溶液 若a+b=1,当a取不同值时,生成物可能有如下情况,试回答:(1)全部是氢氧化铝时,a的取值范围是_(2)全部是偏铝酸钠时,a的 请问大家一下在XP中如何计算我写的文章字数 有谁了解的说下吧, 三相同步电动机和三相异步电动机有什么区别?用简单易懂的话解释.能控制转速的是哪种? 氟橡胶跟金属连接用什么胶 用开姆洛克205行不行 还需要添加什么开姆洛克其他型号混合吗? 枭字怎么拼读 正确的是( )A非金属都是绝缘体B有一定熔点的固体都是晶体C含有氧元素的化合物都是氧化物D含有碳元素的化 酪蛋白与溴甲酚绿指示剂反应的实验目的是什么 为什么我的硬度越来越差了,没有性生活也没有手 淫,有什么办法可改善甚至加强?还有真的有药物能使小弟弟增大增粗吗 如图所示,一束带电粒子,电量的大小为1.5×10^-19C,以速度v=3.2×10^6m/s沿着垂直于磁场方向(接下)同时又垂直于磁场边界的方向射入匀强磁场中;匀强磁场的磁感应强度为B=0.17T,宽为d=10cm传出磁 OP平分∠AOB,PC⊥OA于点C,PD⊥OB于点D,CD与OP交于点Q求证:CQ=DQ 泌尿系统的主要器官 “是以不去”的以“是”和“以”是什么意思 OP平分∠AOB,过点P作OP的垂线分别交OA、OB于点C、D 请问:PC=PD吗?为什么?能不能利用角平分线的性质求证呢? 泌尿系统的主要器官是() 带电粒子速度方向与磁场方向水平时在不计重力的情况下,做匀速直线运动吗?原因是不计重力的理想状态下,还是其他什么原因? 请问,对角线元素均为0的对称矩阵,它是半正定的吗?是否是这样的呢:半正定矩阵的对角线元素是非负的,而且零矩阵是一个特殊矩阵。请问对角线元素为0一定能推出是半正定吗? 分辨石头同学们都喜欢小明从乡下带来的漂亮小石头.小明从中取出两块石头说:“这两块石头,一块是高山上的,一块是海边的,谁能最先分辨出来就奖给谁.”同学们,你能分辨出来吗?请说一说 微胶囊化红磷阻燃剂是什么? 电子元器件一般含有阻燃剂吗 “.shen"重怎么写 红磷与红磷阻燃剂是同一种物质吗?又有什么区别呢? 已知:如图,P是角AOB平分线上的一点,PC垂直于OA,PD垂直于OB,垂足分别为C,D.求证: (1)OC=OD; (2)OP是CD的垂直平分线. 请问下有谁知道在XP中如何计算我写的文章字数 有点着急了啊,打心底麻烦各位 我将自做的电磁铁装置接上电池,也能吸起小铁屑.电池不是发出稳定的电流吗?为什么还能产生磁场? 什么是原初电荷分离原理? 泌尿系统的主要器官是( 每个( )是由大约100多万个( )组成的?它又是由( ),( ),( )组成. across和cross有啥区别? 为什么电源正负极总保持一定数量的正负电荷.电源没有接入电路时,正负极会保持一定数量的正负电荷吗?我们老师说电路中有电流时,是所有导体和导线中的自由电子定向移动,这样的话正极 谁知道在XP中如何计算我写的文章字数 有谁了解的说下吧,打心底感谢了北4 低温试验箱温度设置说明我想老化一电流传感器,但不知道低温试验箱的温度如何设置,所以想找一份低温试验箱的温度设置说明,我们这个是可编程的控制器,是不是凡具有可编程的控制器的试 传送带例题在这求几道传送带相关的综合问题(多过程) 有关摩尔根的知识 巴西油田竞标引发抗议 示威者与军警冲中国代表在联合国呼吁支持最不发达国家欧盟峰会三大议题考量复苏后劲新西兰外交部呼吁下功夫给予中国游客最被美军生擒基地头目健康良好 申请拖6英警方规定当街小便者需亲自打扫卫生或安倍7小时长会后品尝软柿子 满足称“伊朗死囚受绞刑未死 司法部长称没必要杭州十大赏秋处出榜 灵隐路杨公堤龙井英国乔治小王子受洗仪式23日举行 不日本男教师误会“性暗示” 当众露下体俄罗斯暴力恐怖事件频发 总统普京抨击日本拉平企业与政府薪资差距 全国公务日韩航线日本乘客骤减3成 创历史新低报道称泰北“孤军”后裔学中文当导游收法国媒体再曝美国监听法国驻美和联合国澳大利亚11岁男孩因纵火被关“虚拟软美国校园枪击案枪手曾遭欺凌 开枪或是澳大利亚11岁男孩因纵火被关“虚拟软以情报部长质疑伊朗谈判诚意 呼吁美国视频:10岁男孩午夜被切断右手 扔进女排惜败泰国郎平任重道远社区体育图展倡导全民健身今午后各高速进京交通压力大 京承昨流女排惜败泰国郎平任重道远全国特色农产品新发地设集散地居民展才艺社区庆团圆看女汉子背后铁汉柔情美称枪击案嫌犯或系随机杀人安倍指示报废两个核反应堆居民展示厨艺比拼健康饮食老男孩为战皇马一周两练 球迷感慨万千吴奇隆听观众话不玩雷造型向逝去的青春致敬台湾景区落石砸中大陆客美国官员称美方未拒绝马杜罗专机过境美人口密集社区宣传电梯安全北京:轿车冲进饭店撞伤店主儿子 肇事叫醒抑郁妈 3岁娃被扔下7楼郎平:回去好好练下三路 大家已尽力没夫妇钱包遗落 邻座女子顺走郎平:回去好好练下三路
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘