我希望读取特定文件夹中的所有文本文件。文件名中没有任何通用模式-否则任务会更容易。
//read a file from the directory //Perform a common operation //write output to a common file //read the next file
如果我也可以处理子文件夹,那将是很好,但是即使是基本的实现也已足够。
我尝试查看先前询问的相关问题,但是没有一个给出我需要的C和Linux特定答案。
编辑 :所以,这是我根据收到的答案写的-
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <dirent.h> #include <unistd.h> #include <errno.h> int main(int argc, char **argv) { DIR* FD; struct dirent* in_file; FILE *output_file; FILE *entry_file; char buffer[BUFSIZ]; /* Opening common file for writing */ output_file = fopen("/home/pnp/snort_rules_folder/rulesoutput.txt", "a+"); if (output_file == NULL) { fprintf(stderr, "Error : Failed to open output_file\n"); return 1; } /* Scanning the in directory */ if (NULL == (FD = opendir ("/home/pnp/snort_rules_folder/rules"))) { fprintf(stderr, "Error : Failed to open input directory\n"); fclose(output_file); return 1; } while ((in_file = readdir(FD))) { /* On linux/Unix we don't want current and parent directories * If you're on Windows machine remove this two lines */ if (!strcmp (in_file->d_name, ".")) continue; if (!strcmp (in_file->d_name, "..")) continue; /* Open directory entry file for common operation */ /* TODO : change permissions to meet your need! */ entry_file = fopen(in_file->d_name, "r"); if (entry_file == NULL) { fprintf(stderr, "Error : Failed to open entry file\n"); fclose(output_file); return 1; } /* Doing some stuff with entry_file : */ while (fgets(buffer, BUFSIZ, entry_file) != NULL) { /* Use fprintf or fwrite to write some stuff into common_file*/ } fprintf(output_file, "reading file %s", in_file->d_name); /* When you finish with the file, close it */ fclose(entry_file); } /* Don't forget to close common file before leaving */ fclose(output_file); return 0; }
并收到 错误 -pnp @ pnp-laptop:〜/ snort_rules_folder $ ./a.out 错误:无法打开条目文件
您可以使用此示例代码并根据需要对其进行修改:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <dirent.h> #include <unistd.h> #include <errno.h> /* This is just a sample code, modify it to meet your need */ int main(int argc, char **argv) { DIR* FD; struct dirent* in_file; FILE *common_file; FILE *entry_file; char buffer[BUFSIZ]; /* Openiing common file for writing */ common_file = fopen(path_to_your_common_file, "w"); if (common_file == NULL) { fprintf(stderr, "Error : Failed to open common_file - %s\n", strerror(errno)); return 1; } /* Scanning the in directory */ if (NULL == (FD = opendir (in_dir))) { fprintf(stderr, "Error : Failed to open input directory - %s\n", strerror(errno)); fclose(common_file); return 1; } while ((in_file = readdir(FD))) { /* On linux/Unix we don't want current and parent directories * On windows machine too, thanks Greg Hewgill */ if (!strcmp (in_file->d_name, ".")) continue; if (!strcmp (in_file->d_name, "..")) continue; /* Open directory entry file for common operation */ /* TODO : change permissions to meet your need! */ entry_file = fopen(in_file->d_name, "rw"); if (entry_file == NULL) { fprintf(stderr, "Error : Failed to open entry file - %s\n", strerror(errno)); fclose(common_file); return 1; } /* Doing some struf with entry_file : */ /* For example use fgets */ while (fgets(buffer, BUFSIZ, entry_file) != NULL) { /* Use fprintf or fwrite to write some stuff into common_file*/ } /* When you finish with the file, close it */ fclose(entry_file); } /* Don't forget to close common file before leaving */ fclose(common_file); return 0; }
希望这一切。
问候。