c语言 合并文件夹中所有文件
时间: 2024-10-22 07:10:50 浏览: 29
批量合并CSV文件,保留唯一的表头,软件已封装完毕,拥有较好的操作界面和视图,可以选择需要合并的文件夹和保存路径
5星 · 资源好评率100%
在C语言中,合并文件夹中的所有文件通常涉及到读取每个文件的内容,然后将其追加到一个新的文件中。这需要一些操作系统相关的库,例如`stdio.h`用于文件操作,以及`dirent.h`或`sys/stat.h`来遍历目录。
以下是一个简单的示例程序,它在给定的目录下逐个打开子文件,并将它们的内容添加到一个结果文件中:
```c
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
// 递归函数,处理当前目录及其子目录中的文件
void merge_files(const char* dir_path, const char* result_file) {
DIR* dp = opendir(dir_path);
if (dp == NULL) {
perror("opendir failed");
return;
}
struct dirent* entry;
while ((entry = readdir(dp)) != NULL) {
// 忽略目录
if (entry->d_type == DT_DIR && strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
continue;
}
// 构建子文件完整路径
char subfile_path[PATH_MAX];
snprintf(subfile_path, PATH_MAX, "%s/%s", dir_path, entry->d_name);
// 仅处理普通文件
if (entry->d_type == DT_REG) {
FILE* subfile = fopen(subfile_path, "r");
if (subfile == NULL) {
perror("fopen failed");
continue;
}
fseek(result_file, 0, SEEK_END); // 将结果文件指针移动到末尾
char buffer[BUFSIZ]; // 临时存储文件内容
size_t bytes_read;
while ((bytes_read = fread(buffer, sizeof(char), BUFSIZ, subfile)) > 0) {
fwrite(buffer, sizeof(char), bytes_read, result_file);
}
fclose(subfile);
}
}
closedir(dp);
}
int main() {
const char* input_dir = "path_to_your_directory";
const char* output_file = "merged_output.txt";
merge_files(input_dir, output_file);
printf("All files merged into %s\n", output_file);
return 0;
}
阅读全文