-
-
[原创]用递归实现目录结构的复制
-
发表于: 2009-8-8 21:56 6837
-
// CopyFileA.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windows.h> #include <stdio.h> char szSrcName[256];//[COLOR="Blue"]保存当前目录的名字(非路径)[/COLOR] char szFindDir[256];//保[COLOR="Blue"]存FindFirstFile的第一个参数[/COLOR] char src[256];//[COLOR="Blue"]源路径[/COLOR] char dst[256];//[COLOR="RoyalBlue"]目的路径[/COLOR] //[COLOR="RoyalBlue"]判断是否是文件[/COLOR] BOOL IsFile(LPSTR lpFile) { DWORD dwFileAtt=GetFileAttributes(lpFile); if ((dwFileAtt&FILE_ATTRIBUTE_DIRECTORY)!=0) { return FALSE; } return TRUE; } //[COLOR="Blue"]通过当前路径获取当前文件名[/COLOR] void GetSrcFileName(LPSTR src) { int n=lstrlen(src); for (;src[n-1]!='\\';n--) ; lstrcpy(szSrcName,src+n); } //[COLOR="Blue"]进入目录[/COLOR] void EnterDirectory(LPSTR src,LPSTR file) { int n=lstrlen(src); if (src[n-1]=='\\') { memcpy(src+n,file,lstrlen(file)+1); } else { memcpy(src+n,"\\",1); memcpy(src+n+1,file,lstrlen(file)+1); } } //[COLOR="Blue"]离开目录[/COLOR] void LeaveDirectory(LPSTR path) { int n=lstrlen(path)-1; for (;path[n]!='\\';n--) ; path[n]='\0'; } //[COLOR="Blue"]初始化szFindDir变量[/COLOR] void InitFind(LPSTR src) { int n=lstrlen(src); if (src[n-1]=='\\') { memcpy(szFindDir,src,n); memcpy(szFindDir+n,"*",2); } else { memcpy(szFindDir,src,n); memcpy(szFindDir+n,"\\*",3); } } //[COLOR="Blue"]复制的递归函数[/COLOR] void MyCopyFile() { if (IsFile(src)) { printf(src); printf("\n复制到\n"); printf(dst); printf("\n\n"); //[COLOR="Blue"]具体的复制是在这里实现[/COLOR] [COLOR="Blue"]//do[/COLOR] LeaveDirectory(src); return; } else { InitFind(src); WIN32_FIND_DATA* lpWfd=new WIN32_FIND_DATA;//[COLOR="Blue"]如果直接定义WIN32_FIND_DATA Wfd,当目录结构比较复杂,则程序运行到最后会出错,因为堆栈容易满[/COLOR] //[COLOR="Blue"]则程序运行到最后会出错,因为堆栈容易满[/COLOR] HANDLE hFile=FindFirstFile(szFindDir,lpWfd); GetSrcFileName(src); EnterDirectory(dst,szSrcName); do { if ((lstrcmp(lpWfd->cFileName,".") & lstrcmp(lpWfd->cFileName,".."))!=0) { EnterDirectory(src,lpWfd->cFileName); MyCopyFile(); } } while(FindNextFile(hFile,lpWfd)); delete lpWfd; LeaveDirectory(dst); LeaveDirectory(src); } } //main int main(int argc, char* argv[]) { if (argc!=3) { printf("useage:\r\ncopyfilea src dst\n \ \rexample:\r\n \ \rcopyfilea c:\\ d:\\ 把c盘内容全部复制到d盘\r\n \ \rcopyfilea c:\\boot.ini d:\\dir 把c:\\boot.ini复制到存在的目录d:\\dir\r\n \ \rcopyfilea c:\\windows d:\\dir 把目录c:\\windows复制到d:\\dir目录中\r\n \ \r\t\t本程序只是示例,打印出复制过程中的目录结构"); getchar(); return 1; } lstrcpy(src,argv[1]); lstrcpy(dst,argv[2]); MyCopyFile(); return 0; } //by hatling //2009.8.8
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏记录
参与人
雪币
留言
时间
Youlor
为你点赞~
2024-2-25 02:28
伟叔叔
为你点赞~
2024-1-4 04:43
QinBeast
为你点赞~
2023-12-11 00:11
shinratensei
为你点赞~
2023-10-30 04:49
一笑人间万事
为你点赞~
2023-10-11 00:10
心游尘世外
为你点赞~
2023-9-28 04:04
飘零丶
为你点赞~
2023-9-21 00:20
赞赏
他的文章
- [原创]看雪wp8 客户端 30786
- [原创]xx多点还原,部分开源 8254
- 360你半个月连蓝2次,你叫我情何以堪 6929
- [原创][暑期小礼物],xx多点还原系统 11168
谁下载
kanxue
FishSeeWater
AloneWolf
草原猎豹
guoke
jijimao
amdey
zhujian
zhzhtst
我是大头
hwbcs
YamingW
jingru
imhacker
info
pcasa
sudami
aliwy
creakerzgz
大菜一号
jxphklibin
nevergone
vvsky
tease
ZSYL
zzage
xacker
垃圾一个
xxw
coolwxd
Nukou
whyhnlsj
yingyue
xiejienet
slore
cmdxhz
仲夏
yinghetao
错过
bhltwrn
anyueyue
zhchchqihu
chinazgj
hyp
梦魇颖雨
zapline
rst
Fypher
晕菜菜
hljleo
wanghg
liangdong
junzhang
fzxfyg
hitcstrike
leeone
sssccc
dayed
pak
木桩
nudtxp
yangya
fmicromath
Barend
hatling
dmpig
DrAvatar
nwwfewx
joker陈
荒城
espzj
catface
qinxijp
想当然
jackozoo
microdebug
豪猪
溯雪
lishhu
cold
莫灰灰
木叶ss
redchair
tokiii
demoscene
邓韬
lpfei
codemarker
lvncl
wykyang
SunV
lovepeng
CoolSec
cyberad
kkkZ
Spritutu
tydef
看原图
赞赏
雪币:
留言: