本程序根据其他同学的方法总结修改而来,主要方便自己修改文件
话不多说,直接贴代码,需要同学自取
#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
char oldstr[512] = {0};
char newstr[512] = {0};
void str_replace(char * src, char * dst, char * oldstr, char * replacestr){
int i,len;
len = strlen(src);
for(int i = 0;i < len;i++){
if(!strncmp(src+i,oldstr,strlen(oldstr))){//查找目标字符串
strcat(dst, replacestr);
i += strlen(oldstr) - 1;
}else{
strncat(dst, src + i,1);//保存一字节进缓冲区
}
}
printf("%s : %s\n", __func__, dst);
}
int change_name_func(char * path){
char dst[512];
char cmd[512];
struct stat s_buf;
bzero(cmd, sizeof(dst));
bzero(dst, sizeof(dst));
stat(path, &s_buf); //获取文件信息, 放到buf中
//判断输入的文件路径是目录吗, 是往下继续,否则另外处理
if(S_ISDIR(s_buf.st_mode)){
printf("------> %s is a dir \n",path);
struct dirent *filename = NULL;
DIR *dp = opendir(path);
while(filename = readdir(dp)){
char file_path[512];
bzero(file_path, 512);
strcat(file_path, path);
strcat(file_path, "/");
if (!strcmp(filename->d_name, ".") || !strcmp(filename->d_name, "..")){
continue;
}
strcat(file_path, filename->d_name);
printf(" file_path : %s \n", file_path);
stat(file_path, &s_buf);
if(S_ISDIR(s_buf.st_mode)){
printf(" %s is a dir \n", file_path);
change_name_func(file_path);
}else if(S_ISREG(s_buf.st_mode)){
printf(" %s is regular file \n", file_path);
if (!strncmp(filename->d_name, oldstr, strlen(oldstr)))
{
str_replace(file_path, dst, oldstr, newstr);
sprintf(cmd, "mv %s %s", file_path, dst);
printf("%s\n",cmd);
system(cmd);
}
}
}
}else if(S_ISREG(s_buf.st_mode)){
printf(" %s is a regular file \n", path);
}
return 0;
}
int main(int argc, char * argv[]){
char * path = argv[1];
printf("输入需要修改的文件名:\n");
scanf("%s", oldstr);
printf("输入新文件名:\n");
scanf("%s", newstr);
printf(" oldstr: %s, newstr: %s\n", oldstr, newstr);
change_name_func(path);
return 0;
}