gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-28 23:56:40 25 4
gpt4 key购买 nike

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

//read a file from the directory  
//Perform a common operation
//write output to a common file
//read the next file

如果我也可以处理子文件夹,那就太好了,但即使是基本的实现也足够了。

我尝试查看之前提出的相关问题( herehereherehere ),但没有一个给出我需要的 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 - 如何使用C读取文件夹中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11736060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com