如何使用C读取文件夹中的所有文件

我希望读取特定文件夹中的所有文本文件。文件名中没有任何通用模式-否则任务会更容易。

//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;

}

希望这一切。

问候。

以上是 如何使用C读取文件夹中的所有文件 的全部内容, 来源链接: utcz.com/qa/426710.html

回到顶部