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
- C语言写递归复制文件夹和文件
- Java中递归实现复制文件夹和文件
- Qt递归遍历文件夹和文件目录
- 递归获取文件夹内子目录和文件
- C语言函数库和文件
- C语言函数库和文件
- ASP.NET(C#)-利用递归遍历文件夹和文件存入TreeView---转自360个人图书馆
- java实现文件夹的复制和文件的复制
- 用递归列出文件夹所有文件夹和文件
- 递归方式遍历文件夹下所有子文件夹和文件
- 递归 查找 一个文件夹所有的子文件夹和文件
- C/C++遍历文件夹和文件
- C/C++遍历文件夹和文件
- 【语言-批处理】删除文件夹下所有的文件夹和文件
- JAVA中文件夹的复制和文件的遍历
- 如何使用c语言递归地列出linux系统的所有目录和文件
- 统计文件夹和文件个数的递归算法二
- Qt实现遍历文件夹和文件目录(递归)
- jsonp和XMLHttpRequest用法异同,jsp+js+servlet+mysql
- 优化 | MySQL全面快速优化参考
- PAT1025 反转链表
- SRM573 Div1
- OpenCV学习笔记(08):opencv3.2+cmake3.8+VS2013,编译opencv_contrib
- C语言写递归复制文件夹和文件
- 4月10日,MyThread,每日20行。
- Spring MVC 输出模型数据
- POJ3670Eating Together(LIS最长(非)上升(下降)子序列模板)
- ubuntu16.04 上安装 ICE
- Java从汉字到拼音--pinyin4j使用
- node.js项目改进之路由分发系统下路由命名
- UVA 1605 Building for UN 机智题。。
- caffe中DATA层crop_size解释