【发布时间】:2021-04-29 17:38:53
【问题描述】:
我希望阅读特定文件夹中的所有文本文件。这些文件的名称没有任何共同的模式 - 否则任务会更容易。
//read a file from the directory
//Perform a common operation
//write output to a common file
//read the next file
如果我也可以处理子文件夹会很好,但即使是基本实现也足够了。
我尝试查看之前提出的相关问题(here、here、here 和 here),但没有一个给出我需要的 C 和 Linux 特定答案。
edit:所以,这是我根据收到的答案写的-
#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
错误:无法打开入口文件
【问题讨论】:
-
我认为您无法找到重复项的原因是使用了“文件夹”一词而不是更常见的“目录”(至少在 Linux 平台上)。
-
你能用
find -type f -exec your_program {} + >output.file吗? -
@GregHewgill 嗯...你提到的这个问题不涉及“文件名”...我说的是阅读文件...
-
好吧,一旦你有了文件名,那么打开文件并阅读它们就非常简单了。 (或者这就是你的问题?)