2

当您知道目录中会有很多数据时,从文本文件中读取和提取数据的正确方法是什么?我知道您可以使用fopen()来获取指向文件的指针,然后执行类似while(fgets(..) != null){}从整个文件中读取的操作,但是我怎么能从另一个文件中读取呢?我想遍历目录中的每个文件。

4

2 回答 2

2

Sam,您可以使用 opendir/readdir,如下面的小函数。

#include <stdio.h>
#include <dirent.h>

static void scan_dir(const char *dir)
{
    struct dirent * entry;
    DIR *d = opendir( dir );

    if (d == 0) {
        perror("opendir");
        return;
    }

    while ((entry = readdir(d)) != 0) {
        printf("%s\n", entry->d_name);
        //read your file here
    }
    closedir(d);
}


int main(int argc, char ** argv)
{
    scan_dir(argv[1]);
    return 0;
}

这只是打开一个在命令行上命名的目录并打印它包含的所有文件的名称。但是,您可以根据需要处理文件,而不是打印名称...

于 2012-11-17T02:50:49.013 回答
1

通常,文件列表会在命令行上提供给您的程序,因此可以在作为第二个参数传递给 main() 的指针数组中使用。即调用外壳程序用于查找目录中的所有文件,然后您的程序只需遍历 argv[] 以打开和处理(和关闭)每个文件。

见第 162 in "The C Programming Language", Kernighan and Ritchie, 2nd edition,为你可以使用的代码提供了一个几乎完整的模板。用您自己的处理替换filecopy()该示例中的函数。

如果您确实需要直接从程序中读取一个(或多个目录),那么您需要阅读 libc 中的 opendir(3) 和相关函数。一些系统还提供了一个名为 ftw(3) 或 fts(3) 的库函数,它们也非常方便。

于 2012-11-17T02:46:13.420 回答