当前位置: 首页 > 面试题库 >

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

贡威
2023-03-14
问题内容

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

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

希望这一切。

问候。



 类似资料:
  • 问题内容: 如何通过Java读取文件夹中的所有文件? 问题答案: Java 8提供了Files.walk API。

  • 问题内容: 我想配置为顺序读取特定文件夹内的所有文件。 由于委托将尝试打开一个名为的文件,因此以下内容无效,这当然是无效的。我要在这里更改什么? 等效的xml配置将编写如下,如何将其重写为仅Java的配置? 问题答案: 我认为您应该使用。

  • 我使用Spring Batch MultiResourceItemReader来读取多个模块文件。这些文件位于父目录及其子目录中。 已经尝试: > 使用PathMatchingResourcePatterResolver,如代码示例中所示(灵感来自JAR中的查找资源与PathMatchingResourcePatterResolver和URLClassloader

  • 问题内容: 比方说,我有一个文件夹,名为和里面我有,和。如何使用Java和读取文件夹中的所有文件(如果可能的话)? 问题答案: 类似于以下内容应该可以帮助您,请注意,为了简单起见,我使用apache commons FileUtils而不是弄乱缓冲区和流…

  • 如果我们有一个文件夹,其中包含所有内容。txt文件,我们可以使用sc.textFile(“folder/*.txt”)读取所有这些文件。但是,如果我有一个文件夹,其中包含更多名为datewise的文件夹,例如,,。。。,其中还包含一些<代码>。记录文件。如何在Spark中阅读这些内容? 在我的例子中,结构更加嵌套

  • 如何使用URI从资源文件夹的子文件夹中读取文件 资源文件夹中有一些json文件,如: 现在我想在我的课堂上读这个 这是我正在尝试的。 我的东西工作正常,但我遇到的问题是我不想使用< code>toURI,因为它会失败。