c - 如何用C语言读取目录下所有文件的数据?

标签 c file-io io

我试图1)查找目录中的所有文件并显示它们,2)打开所有找到的文件并从中读取数据(字符)3)将读取的数据输出到屏幕或新文件。

这是用 C 语言完成的,您将在下面看到我当前的代码。我遇到的问题是:我可以找到目录中的所有文件并将它们打印到屏幕上(上面的第 1 点),但是当我尝试打开找到的文件并从中读取数据(字符)时(上面第 2 点),我遇到了段错误。

如果我注释掉下面的 fscanf(entry_file, "%s", files); 行,但保留 entry_file = fopen(in_file->d_name, "r"); 行,它编译正常并将文件写入屏幕。我还尝试使用 int i 来索引 fscanf 行(下面未显示),并产生了相同的段错误。

那么,我如何从这些找到的文件中读取数据呢?谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <errno.h>

int main()
{
    DIR* dir;
    FILE *entry_file;
    struct dirent *in_file;
    char files[1000];
    int i;

    dir = opendir("/Users/tcn/data");

    if(dir==NULL){
        printf("Error! Unable to read directory");
        exit(1);
    }

    while( (in_file=readdir(dir)) != NULL) {
        if (!strcmp (in_file->d_name, "."))
            continue;
        if (!strcmp (in_file->d_name, ".."))
            continue;
        printf("%s\n", in_file->d_name);
        entry_file = fopen(in_file->d_name, "r");

        fscanf(entry_file, "%s", files); 
    }

    closedir(dir);
    fclose(entry_file);
    return 0;
}

最佳答案

鉴于您在使用 dirin_file 之前正确检查了 NULL ,唯一可能导致此问题的其他原因entry_file 是否为空。使用前检查一下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <errno.h>

int main()
{
    DIR* dir;
    FILE *entry_file;
    struct dirent *in_file;
    char files[1000];
    int i;

    dir = opendir("/Users/tcn/data");

    if(dir==NULL) {
        printf("Error! Unable to read directory");
        exit(1);
    }

    while((in_file=readdir(dir)) != NULL) {
        if (!strcmp (in_file->d_name, "."))
            continue;
        if (!strcmp (in_file->d_name, ".."))
            continue;
        printf("%s\n", in_file->d_name);
        entry_file = fopen(in_file->d_name, "r");
        if (entry_file != NULL) {
            fscanf(entry_file, "%s", files);
            /* whatever you want to do with files */
            fclose(entry_file);
        }
    }

    closedir(dir);
    return 0;
}

另请注意,正如其他多个用户评论的那样,您应该在循环内关闭entry_file

关于c - 如何用C语言读取目录下所有文件的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31659867/

相关文章:

c++ - 过时 - OpenCV 的错误模式

java - 在Java中使用Windows资源管理器的 "Open File"函数

c++ - 清理此代码 [文件输入]

unix - 如何测试是否支持稀疏文件

c++ - 使用 libcurl 下载功能,但它不完整

c - printf float 以尾随零的数量作为变量

java - 请求回复中的源端口 (69) 不正确。 TFTP发送文件

c# - 如何复制具有取消复制功能的文件?

c - C 中出现段错误

javascript - VLC 打开视频文件需要多少秒?