Linux下c语言实现将一个目录下的所有文件和目录复制到另一个目录下
来源:互联网 发布:php 设置 argv 编辑:程序博客网 时间:2024/05/22 02:06
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<dirent.h>
#include<string.h>
char paths[1000],patht[1000],temp_paths[1000],temp_patht[1000];
void Copy(char *spathname,char *tpathname)
{
int sfd,tfd;
struct stat s,t;
char c;
sfd=open(spathname,O_RDONLY);
tfd=open(tpathname,O_RDWR|O_CREAT);
while(read(sfd,&c,1)>0)
write(tfd,&c,1);
fstat(sfd,&s);
chown(tpathname,s.st_uid,s.st_gid);
chmod(tpathname,s.st_mode);
close(sfd);
close(tfd);
}
void d_copy(char *spathname,char *tpathname)
{
struct stat s,t,temp_s,temp_t;
struct dirent *s_p;
DIR *dirs,*dirt;
stat(spathname,&s);
mkdir(tpathname,s.st_mode);
chown(tpathname,s.st_uid,s.st_gid);
dirt=opendir(tpathname);
dirs=opendir(spathname);
strcpy(temp_paths,spathname);
strcpy(temp_patht,tpathname);
while((s_p=readdir(dirs))!=NULL)
{
if(strcmp(s_p->d_name,".")!=0&&strcmp(s_p->d_name,"..")!=0)
{
strcat(temp_paths,"/");
strcat(temp_paths,s_p->d_name);
strcat(temp_patht,"/");
strcat(temp_patht,s_p->d_name);
lstat(temp_paths,&s);
temp_s.st_mode=s.st_mode;
if(S_ISLNK(temp_s.st_mode))
{
printf("%s is a symbol link file\n",temp_paths);
}
else if(S_ISREG(temp_s.st_mode))
{
printf("Copy file %s ......\n",temp_paths);
Copy(temp_paths,temp_patht);
strcpy(temp_paths,spathname);
strcpy(temp_patht,tpathname);
}
else if(S_ISDIR(temp_s.st_mode))
{
printf("Copy directory %s ......\n",temp_paths);
d_copy(temp_paths,temp_patht);
strcpy(temp_paths,spathname);
strcpy(temp_patht,tpathname);
}
}
}
}
int main()
{
struct dirent *sp,*tp;
char spath[1000],tpath[1000],temp_spath[1000],temp_tpath[1000];
struct stat sbuf,tbuf,temp_sbuf,temp_tbuf;
char sdirect[1000],tdirect[1000],judge;
DIR *dir_s,*dir_t;
printf("Please input the sourse direct path and name :");
scanf("%s",sdirect);
dir_s=opendir(sdirect);
if(dir_s==NULL)
{
printf("This directory don't exist !\n");
return 0;
}
if(stat(sdirect,&sbuf)!=0)
{
printf("Get status error !\n");
return 0;
}
printf("Please input the target direct path and name :");
scanf("%s",tdirect);
dir_t=opendir(tdirect);
if(dir_t==NULL)
{
mkdir(tdirect,sbuf.st_mode);
chown(tdirect,sbuf.st_uid,sbuf.st_gid);
dir_t=opendir(tdirect);
}
else
{
chmod(tdirect,sbuf.st_mode);
chown(tdirect,sbuf.st_uid,sbuf.st_gid);
}
strcpy(spath,sdirect);
strcpy(tpath,tdirect);
strcpy(temp_spath,sdirect);
strcpy(temp_tpath,tdirect);
/////////////////////////////////////////////////////////////////////////////////
printf("Begin copy ........\n");
while((sp=readdir(dir_s))!=NULL)
{
if(strcmp(sp->d_name,".")!=0&&strcmp(sp->d_name,"..")!=0)
{
strcat(temp_spath,"/");
strcat(temp_spath,sp->d_name);
strcat(temp_tpath,"/");
strcat(temp_tpath,sp->d_name);
lstat(temp_spath,&sbuf);
temp_sbuf.st_mode=sbuf.st_mode;
if(S_ISLNK(temp_sbuf.st_mode))
{
printf("%s is a symbolic link file\n",temp_spath);
}
else if((S_IFMT&temp_sbuf.st_mode)==S_IFREG)
{
printf("Copy file %s ......\n",temp_spath);
Copy(temp_spath,temp_tpath);
strcpy(temp_tpath,tpath);
strcpy(temp_spath,spath);
}
else if((S_IFMT&temp_sbuf.st_mode)==S_IFDIR)
{
printf("Copy directory %s ......\n",temp_spath);
d_copy(temp_spath,temp_tpath);
strcpy(temp_tpath,tpath);
strcpy(temp_spath,spath);
}
}
}
printf("Copy end !\n");
closedir(dir_t);
closedir(dir_s);
return 1;
}
转载自:http://biancheng.dnbcw.info/linux/74567.html
- Linux下c语言实现将一个目录下的所有文件和目录复制到另一个目录下
- Linux下c语言实现将一个目录下的所有文件和目录复制到另一个目录下
- Linux下c语言实现将一个目录下的所有文件和目录复制到另一个目录下
- 将一个目录下的所有文件复制到另一个目录下
- linux下 目录到目录的复制 C语言实现
- linux下实现将某个目录下的 某种 文件链接到另一个目录下
- Linux 下将一个目录拷贝到另一个目录下
- linux怎么将一个文件移动到另一个目录下
- Ubuntu下将一个文件从一个目录复制到另一个目录中
- 复制一个目录下的所有文件到另外一个目录(Java实现)
- 复制一个目录下的所有文件到另外一个目录(Java实现)
- Android复制assets目录下的文件到另一个目录
- android 获取指定路径下所有文件,将文件从一个目录copy到另一个目录,执行linux命令
- 复制文件夹及所有文件到另一个目录下
- 将一个目录下的文件全部拷贝到另一个目录下
- javaIO_将一个目录下的文件拷贝到另一个目录下(边读边写操作)
- 编写一个程序,将e:\java目录下的所有.java文件复制到e:\jad目录下
- C#将文件复制到另一个目录下
- 一步一步实现五子棋1
- 修改服务器远程登录默认3389端口
- hadoop提供的一种程序驱动管理程序
- 《Effective C++》学习笔记条款08 别让异常逃离析构函数
- C++析构函数为什么要为虚函数
- Linux下c语言实现将一个目录下的所有文件和目录复制到另一个目录下
- javascript JSON.stringify
- Css 鼠标样式
- android Viewpager 左右滑动类似桌面的实现
- 查看Oracle中的隐含参数
- Extjs之EditorGridPanel的beforeedit事件参数
- 执行上下文栈
- WebApp与Native App有何区别
- 【C语言】13-指针和字符串