为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

文件复制算法

2011-06-03 8页 doc 90KB 21阅读

用户头像

is_888396

暂无简介

举报
文件复制算法         文件复制算法 1.​ 任务 在E盘建立一个临时的目录,将D盘所有文件复制到这个临时文件夹里 2.​ 实现原理 文件的复制,主要考虑到对目录的搜索,首先要找到D盘的所有文件,用到上一个算法的搜索子函数,然后每搜索到一个文件,就在指定的临时文件夹下,创建一个新的这个文件的副本。 3.​ 涉及的相关函数 文件操作函数  fopen , fclose 文件搜索所涉及的目录操作函数 findfirst , findnext还有getcwd,setdisk等 结构体 struct ffblk 字符操作函数 strcmp ...
文件复制算法
         文件复制算法 1.​ 任务 在E盘建立一个临时的目录,将D盘所有文件复制到这个临时文件夹里 2.​ 实现原理 文件的复制,主要考虑到对目录的搜索,首先要找到D盘的所有文件,用到上一个算法的搜索子函数,然后每搜索到一个文件,就在指定的临时文件夹下,创建一个新的这个文件的副本。 3.​ 涉及的相关函数 文件操作函数  fopen , fclose 文件搜索所涉及的目录操作函数 findfirst , findnext还有getcwd,setdisk等 结构体 struct ffblk 字符操作函数 strcmp strcat 还有对文件属性的设置函数 chmode , _chmode 有关的操作请参考相关资料 4.​ 程序的主流程图 Main()函数                                                                     true false     copy() 流程图                                                   false         true    false true           Search() 函数流程图                                      false               true false true false true false True false true 5.​  6.​ 程序的不足 程序对有些文件打开存在问题,有待进一步的改进,程序中单一的文件读取和单个字符的写入,这样,在效率上会差一些,有时间可以采用文件缓冲和流式操作文件的存取。 7.​ 附录(原程序) #include #include #include #include #include char FN[13]="*.*"; int sum=0; int count=0; int flag=0; char atib[7]; int copy(char path[],char file_name[]); void main(void) { int drive; /*int handle; */ char path[MAXPATH]="d:"; char oldpath[MAXPATH]="d:\\"; void add_atib(struct ffblk dirment); void search(char path[]); char tem[MAXDIR][MAXPATH]; printf("List all file of e:\\temp\n"); drive=setdisk(3); if(drive>=4) mkdir("e:\\temp"); /* handle=creattemp("e:\\temp\\",0x10); */ chdir(oldpath); search(path); printf("The total file of D: is %5d \n",sum); printf("You have copied to E:\\temp: %d files",flag); getchar(); /*close(handle); */ } /* //////////////////////////////////////////////////// //函数功能:实现对文件属性的判断 //函数原形: void add_atib(struct ffblk dirment) //函数参数:struct ffblk dirment //函数返回值:无 //////////////////////////////////////////////////// */ void add_atib(struct ffblk dirment) { if (dirment.ff_attrib & FA_HIDDEN) atib[0]='H'; else atib[0]='.'; if(dirment.ff_attrib & FA_SYSTEM) atib[1]='S'; else atib[1]='.' ; if(dirment.ff_attrib & FA_RDONLY) atib[2]='R'; else atib[2]='.'; if(dirment.ff_attrib & FA_ARCH) atib[3]='A'; else atib[3]='.'; if(dirment.ff_attrib & FA_LABEL) atib[4]='L'; else atib[4]='.'; if(dirment.ff_attrib &FA_DIREC) atib[5]='D'; else atib[5]='.'; } /* /////////////////////////////////////////////////// //函数功能:实现对文件的递归操作 //函数原形:void display(char path[]) //函数参数:char path[] 数组参数 //返回值:无 /////////////////////////////////////////////////// */ void search(char path[]) { int done,i=0,j; char tem[MAXDIR][MAXPATH]; char oldpath[MAXPATH],t[MAXPATH]; struct ffblk file,dirment; chdir(path); strcpy(t,path); strcat(t,"\\"); /*搜索当前目录下的所有文件*/ done=findfirst(FN,&file,FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_ARCH); while(!done) { add_atib(file); if(!copy(path,file.ff_name)) {printf("%s\\%s %s copy\n",path,file.ff_name,atib); flag++;} sum++; done=findnext(&file); } /*搜索当前目录下的所有子目录*/ done=findfirst(FN,&dirment,FA_DIREC); while(!done) { if(!strcmp(dirment.ff_name,".") ) { done=findnext(&dirment); done=findnext(&dirment); } if(!done) { add_atib(dirment); if(atib[5]=='D') { count++; strcpy(oldpath,path); strcat(path,"\\"); strcat(path,dirment.ff_name); strcpy(tem[++i],path); strcpy(path,oldpath); } chdir(path); } done=findnext(&dirment); } /* 递归调用*/ j=1; while(j<=i) search(*(tem+j++)); } int copy(char path[],char file_name[]) {FILE *pFsrc,*pFdst; char newpathsrc[MAXPATH],newpathdes[MAXPATH]; char c; int attrib; strcpy(newpathsrc,path); strcat(newpathsrc,"\\"); strcat(newpathsrc,file_name); strcpy(newpathdes,"e:\\temp"); strcat(newpathdes,"\\"); strcat(newpathdes,file_name); attrib=_chmod(newpathsrc,0); if((pFsrc=fopen(newpathsrc,"r+b"))==NULL) { printf("%s can't open !\n",newpathsrc); printf("The process terminal \n"); exit(0); return(1); } else { pFdst = fopen(newpathdes,"w+b"); while(1) { c = fgetc(pFsrc); if(feof(pFsrc)) break; fputc(c,pFdst); } } _chmod(newpathdes,1,attrib); fclose(pFsrc); fclose(pFdst); return 0; }
/
本文档为【文件复制算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索