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

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

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

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

#include
#include
#include
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 /root/Desktop/copy.txt");
	system(ls);
//ls > copy.txt

	int 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");
//打开文件->copy	

	char* 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]=='/'){	//存储目录到to
			zero(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/root/Desktop/copy.txt");	
	exit(EXIT_SUCCESS);
}


你可能感兴趣的:(算法)