C语言写递归复制文件夹和文件

来源:互联网 发布:大数据搜索引擎技术 编辑:程序博客网 时间:2024/05/21 18:32

用文件操作写了一个含有复制粘贴部分功能的代码。(创建文件夹和查看文件属性为系统命令)

执行格式:./copy  -rf  /root/Desktop/123/  /root/Desktop/456/

./编译成执行文件的名字  递归复制  想要复制的文件  复制到的地方(要用绝对路径)

#include<stdio.h>#include<stdlib.h>#include<string.h>void cdfile(char* from,char* to,char* p);void cddir(char* to,char* p);void makedir(char*p);void zero(char* p,int n);void filecp(char* p,char* q);void cdfile(char* from,char* to,char* p)    //进去创建文件{int nu=strlen(to);int ne=strlen(from);strcat(from,p);strcat(to,p);filecp(from,to);zero(&to[nu],100-nu);zero(&from[ne],100-ne);}void cddir(char* to,char* p)//进入创建文件夹{int nu=strlen(to);strcat(to,p);makedir(to);zero(&to[nu],100-nu);}void makedir(char*p)     //创建*p文件夹{char mkdir[100]="mkdir ";strcat(mkdir,p);system(mkdir);}void zero(char* p,int n)//将数组清0{int i=0;for(;i<n;i++){p[i]='\0';}}void filecp(char* p,char* q)//文件复制{char* from = strtok(p,"\n");char* to = strtok(q,"\n");        FILE* fa = fopen(from,"r");if(fa == NULL){perror("fopen1 err. \n");exit(EXIT_FAILURE);}        FILE* fb = fopen(to,"w");if(fb == NULL){perror("fopen2 err. \n");exit(EXIT_FAILURE);}        char ch;         while((ch=fgetc(fa))!=EOF){        fputc(ch,fb);        }        fclose(fa);        fclose(fb);return;}int main(int argc,char* argv[]){char ls[100];strcpy(ls,"ls -Rl ");strcat(ls,argv[2]);strcat(ls," > /root/Desktop/copy.txt");system(ls);//ls > copy.txtint flag=0;int i = 0 ;char from[100];//复制目录char to[100]; //粘贴目录char buf[100];//存入gets到的字符串char* sp = NULL;//strtok后的字符串FILE* copy = fopen("/root/Desktop/copy.txt","r");//打开文件->copychar* c=fgets(buf,100,copy);for(i=strlen(buf)-1,flag=0;i>0;i--){if(buf[i]=='/' && flag == 1)break;if(buf[i]=='/' && flag != 1)flag++;}int j = i+1;//复制目录开始的地方sp=strtok(&buf[j],":");strcpy(to,argv[3]);strcat(to,sp);makedir(to);zero(to,100);//创建最外层目录rewind(copy);//初始化文件指针while((fgets(buf,100,copy))!=NULL){if(buf[0]=='/'){//存储目录到tozero(to,100);zero(from,100);strcpy(from,buf);sp=&buf[j];sp=strtok(sp,":");strcpy(to,argv[3]);strcat(to,sp);strcat(to,"/");}if(buf[0]=='d'){//创建目录sp=strtok(buf," ");i=0;while((i++)<8){sp = strtok(NULL," ");}cddir(to,sp);}if(buf[0]=='-'){//复制文件sp=strtok(buf," ");i=0;while((i++)<8){sp = strtok(NULL," ");}for(i=0;i<strlen(from);i++){//去:,加/和‘\0'if(from[i]==':'){from[i]='/';from[i+1]='\0';}}cdfile(from,to,sp);}zero(buf,100);}fclose(copy);system("rm -f /root/Desktop/copy.txt");exit(EXIT_SUCCESS);}


0 0
原创粉丝点击