在windows系统中用C语言实现文件批量改名,检索,目录
时间: 2023-12-06 10:02:04 浏览: 36
好的,以下是一个 Windows 系统下使用 C 语言实现文件批量改名、检索、目录操作的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
void rename_files(const char *dir_path, const char *old_name, const char *new_name) {
WIN32_FIND_DATA find_data;
HANDLE hFind;
char search_path[MAX_PATH];
snprintf(search_path, MAX_PATH, "%s\\*", dir_path);
hFind = FindFirstFile(search_path, &find_data);
if (hFind == INVALID_HANDLE_VALUE) {
perror("FindFirstFile");
return;
}
do {
if (find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
if (strcmp(find_data.cFileName, ".") != 0 && strcmp(find_data.cFileName, "..") != 0) {
char sub_path[MAX_PATH];
snprintf(sub_path, MAX_PATH, "%s\\%s", dir_path, find_data.cFileName);
rename_files(sub_path, old_name, new_name);
}
} else {
if (strstr(find_data.cFileName, old_name) != NULL) {
char old_path[MAX_PATH];
char new_path[MAX_PATH];
snprintf(old_path, MAX_PATH, "%s\\%s", dir_path, find_data.cFileName);
snprintf(new_path, MAX_PATH, "%s\\%s", dir_path, new_name);
if (rename(old_path, new_path) != 0) {
perror("rename");
}
}
}
} while (FindNextFile(hFind, &find_data) != 0);
FindClose(hFind);
}
void search_files(const char *dir_path, const char *search_str) {
WIN32_FIND_DATA find_data;
HANDLE hFind;
char search_path[MAX_PATH];
snprintf(search_path, MAX_PATH, "%s\\*", dir_path);
hFind = FindFirstFile(search_path, &find_data);
if (hFind == INVALID_HANDLE_VALUE) {
perror("FindFirstFile");
return;
}
do {
if (find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
if (strcmp(find_data.cFileName, ".") != 0 && strcmp(find_data.cFileName, "..") != 0) {
char sub_path[MAX_PATH];
snprintf(sub_path, MAX_PATH, "%s\\%s", dir_path, find_data.cFileName);
search_files(sub_path, search_str);
}
} else {
if (strstr(find_data.cFileName, search_str) != NULL) {
printf("%s\\%s\n", dir_path, find_data.cFileName);
}
}
} while (FindNextFile(hFind, &find_data) != 0);
FindClose(hFind);
}
int main() {
const char *dir_path = "C:\\path\\to\\directory";
const char *old_name = "old_name";
const char *new_name = "new_name";
const char *search_str = "search_string";
// 批量重命名
rename_files(dir_path, old_name, new_name);
// 检索文件
search_files(dir_path, search_str);
return 0;
}
```
请注意,Windows 系统下的文件名分隔符为反斜杠(\),因此在拼接路径时需要使用双反斜杠(\\)。此外,在 Windows 系统下使用 rename 函数重命名文件时,需要保证新文件名的目录与原文件名的目录相同,否则会失败。