本文主要是介绍c语言,找到你想要的文件,进行复制、盗墓者是个丑奴儿,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
//盗墓者是个丑奴儿,原
//博主个人网站 :https://daomu.kaige123.com
//打完一波小广告,进入正题
//头文件引入
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <dirent.h>
#include <dirent.h>
//函数申明
int opend(const char * pathname);
void judge(char * pathname);
char * str(const char * str1,const char * str2);
void readf(const char * pathname);
DIR * dir=NULL;
//参数:pathname,opend()打开pathname路径,如果是文件调用:judge()进行文件拷贝,如果是目录调用:str()进行递归目录
int opend(const char * pathname){
dir=opendir(pathname);
if(dir==NULL)
return -1;
struct dirent * reado=NULL;
while((reado=readdir(dir))!=NULL){
char * tmps=NULL;
if(reado->d_name[0]=='.')
continue;
tmps=str(pathname,reado->d_name);
if(reado->d_type==DT_DIR){
readf(tmps);
}else{
judge(tmps);
}
if(reado==NULL)
free(tmps);
}
}
//参数:pathname,readf()对pathname进行递归,如果是文件调用:judge()进行文件拷贝,如果是目录:自调
void readf(const char * pathname){
DIR * dir=opendir(pathname);
struct dirent * reado=NULL;
while((reado=readdir(dir))!=NULL){
char * tmps=NULL;
if(reado->d_name[0]=='.')
continue;
tmps=str(pathname,reado->d_name);
if(reado->d_type==DT_DIR){
readf(tmps);
}else{
judge(tmps);
}
if(reado==NULL)
free(tmps);
}
}
//参数:pathname,pathname是文件的路径
//1:judge对pathname进行拷贝
//2:strstr()先过滤出stu.java
//3:pathname[strlen(pathname)-1]='\0';将最后一个字符/截掉
//4:open打开pathname,read读取内容
//5:open在打开新文件a.txt,O_CREAT如果不存在就创建,O_EXCL如果存在就不创建,0666创建的权限
//6:根据open新打开文件a.txt的文件描述符,write写入open(pathname)读取到的内容
void judge(char * pathname){
if(strstr(pathname,"stu.java")!=NULL){
printf("stu.java path : %s \n",pathname);
pathname[strlen(pathname)-1]='\0';
int fd=open(pathname,O_RDWR);
char ar[100]={0};
read(fd,ar,sizeof(ar));
int ffd=open("./a.txt",O_RDWR|O_CREAT|O_EXCL,0666);
write(ffd,ar,strlen(ar));
close(fd);
close(ffd);
}
}
//参数:str1,路径,str2,路径,str()作用:拼接路径,并在路径末尾加/
//例:/usr,与home,返回/usr/home/
char * str(const char * str1,const char * str2){
int size1=strlen(str1);
int size2=strlen(str2);
char * arr=(char *)malloc(size1+size2+2);
memset(arr,'0',size1+size2);
memcpy(arr,str1,size1);
memcpy(&(arr[size1]),str2,strlen(str2));
arr[size1+size2]='/';
return arr;
}
//main测试
int main(int arg,char ** arv){
if(arv[1]!=NULL)
opend(arv[1]);
return 0;
}
运行结果:
1:pwd获得当前路径,ls查看当前路径下的文件(并没有a.txt),编译代码运行可执行文件
2:stu.java path:...,找到了stu.java的所在路径。ls查看当前目录下文件,多了个a.txt,cat查看文件内容,a.txt是stu.java的内容,初步达到结果
这篇关于c语言,找到你想要的文件,进行复制、盗墓者是个丑奴儿的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!