帮我写一个C语言程序,作用是读取E:\Users\mine\Desktop\test2文件夹内所有文件(包括子文件),然后再检测这些文件的文件名,有没有特定字符串(如:大鱼),有则删除这个字符串作为新文件名保存回原文件夹(相当于重命名)
时间: 2023-06-19 17:10:34 浏览: 120
好的,以下是您需要的程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
void rename_file(const char *path, const char *oldname, const char *newname) {
char oldpath[256], newpath[256];
sprintf(oldpath, "%s/%s", path, oldname);
sprintf(newpath, "%s/%s", path, newname);
rename(oldpath, newpath);
}
void traverse_dir(const char *path, const char *target) {
DIR *dir;
struct dirent *entry;
dir = opendir(path);
if (dir == NULL) {
printf("Cannot open directory %s\n", path);
exit(EXIT_FAILURE);
}
while ((entry = readdir(dir)) != NULL) {
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
continue;
}
char filepath[256];
sprintf(filepath, "%s/%s", path, entry->d_name);
if (entry->d_type == DT_DIR) {
traverse_dir(filepath, target);
} else {
if (strstr(entry->d_name, target) != NULL) {
char newname[256];
strcpy(newname, entry->d_name);
memmove(&newname[strstr(newname, target) - newname], &newname[strstr(newname, target) - newname + strlen(target)], strlen(newname) - strlen(target) - (strstr(newname, target) - newname) + 1);
rename_file(path, entry->d_name, newname);
}
}
}
closedir(dir);
}
int main() {
const char *path = "E:/Users/mine/Desktop/test2";
const char *target = "大鱼";
traverse_dir(path, target);
return 0;
}
```
该程序使用了递归遍历目录的方式,将指定目录下的所有文件和子目录中的文件全部遍历一遍,并对文件名进行检测和重命名。
在程序中,`traverse_dir`函数用于遍历目录,`rename_file`函数用于重命名文件。在遍历到一个文件时,如果文件名包含指定的字符串,则将该字符串从文件名中删除,并将新文件名作为参数调用`rename_file`函数进行重命名。
请您将程序保存为`rename.c`文件,在命令行中使用以下命令进行编译:
```
gcc rename.c -o rename
```
编译成功后,使用以下命令运行程序:
```
./rename
```
即可实现您需要的功能。注意,程序只会检测文件名中是否包含指定字符串,而不会检测文件内容。如果您需要同时检测文件内容,请修改程序。
阅读全文
相关推荐


















