C语言合并目录下的所有csv文件到一个csv文件中(从第二行开始),合并后把原文件删除
时间: 2024-04-12 16:31:30 浏览: 170
合并显示两个数据表的记录数据
3星 · 编辑精心推荐
要在 C 语言中合并目录下的所有 CSV 文件到一个 CSV 文件中(从第二行开始),并在合并后删除原文件,你可以使用 C 标准库中的文件操作函数来实现。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
#define MAX_FILENAME_LENGTH 256
void mergeCSVFiles(const char* dirPath, const char* mergedFilePath);
void deleteCSVFiles(const char* dirPath);
int main() {
const char* directoryPath = "/path/to/csv/files/directory";
const char* mergedFilePath = "/path/to/merged/file.csv";
mergeCSVFiles(directoryPath, mergedFilePath);
deleteCSVFiles(directoryPath);
return 0;
}
void mergeCSVFiles(const char* dirPath, const char* mergedFilePath) {
DIR *dir;
struct dirent *entry;
FILE *mergedFile = fopen(mergedFilePath, "w");
if (mergedFile == NULL) {
printf("无法打开合并后的文件。\n");
return;
}
dir = opendir(dirPath);
if (dir == NULL) {
printf("无法打开目录。\n");
fclose(mergedFile);
return;
}
int isFirstFile = 1;
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_REG) {
char filePath[MAX_FILENAME_LENGTH];
strcpy(filePath, dirPath);
strcat(filePath, "/");
strcat(filePath, entry->d_name);
if (strstr(entry->d_name, ".csv") != NULL) {
FILE *csvFile = fopen(filePath, "r");
if (csvFile != NULL) {
char line[MAX_FILENAME_LENGTH];
// 跳过第一行
if (isFirstFile) {
fgets(line, sizeof(line), csvFile);
isFirstFile = 0;
}
// 逐行读取 CSV 文件内容并写入合并文件中
while (fgets(line, sizeof(line), csvFile) != NULL) {
fputs(line, mergedFile);
}
fclose(csvFile);
}
}
}
}
closedir(dir);
fclose(mergedFile);
}
void deleteCSVFiles(const char* dirPath) {
DIR *dir;
struct dirent *entry;
dir = opendir(dirPath);
if (dir == NULL) {
printf("无法打开目录。\n");
return;
}
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_REG) {
char filePath[MAX_FILENAME_LENGTH];
strcpy(filePath, dirPath);
strcat(filePath, "/");
strcat(filePath, entry->d_name);
if (strstr(entry->d_name, ".csv") != NULL) {
remove(filePath);
}
}
}
closedir(dir);
}
```
请将代码中的 `/path/to/csv/files/directory` 替换为你实际的 CSV 文件所在的目录路径,将 `/path/to/merged/file.csv` 替换为你希望生成的合并后的 CSV 文件的路径。
这段代码使用了 `<dirent.h>` 头文件中的函数来遍历目录中的文件,并使用标准 C 文件操作函数来读取和写入 CSV 文件内容。函数 `mergeCSVFiles` 用于合并目录下的所有 CSV 文件到一个文件中,函数 `deleteCSVFiles` 用于删除目录下的所有 CSV 文件。
确保在使用这段代码之前,你已经安装了 C 语言的编译环境,并包含了相应的头文件和库。编译时需要链接适当的库文件,如 `gcc -o merge_csv merge_csv.c`,然后运行可执行文件 `./merge_csv`。
阅读全文