readdir()以点而不是文件开头

时间:2013-11-28 11:44:44

标签: c readdir

我有点问题。我正在从目录中读取文件并且它可以正常工作,但它在开始时读取了两个额外的文件......它是什么? 例如,有一个文件列表:"A348", "A348A", "A348B" 这就是我得到的:".", "..", "A348", "A348A", "A348B" ???

DIR *dir;
struct dirent *dp;
char * file_name;
while ((dp=readdir(dir)) != NULL) {

        file_name = dp->d_name;            
}

2 个答案:

答案 0 :(得分:18)

.是当前目录的目录条目

..是层次结构中一级目录的目录条目

你必须使用以下方法过滤掉它们:

if ( !strcmp(dp->d_name, ".") || !strcmp(dp->d_name, "..") )
{
     // do nothing (straight logic)
} else {
     file_name = dp->d_name; // use it
}

有关在Windows上使用...的更多信息:

".\\file" - 这是当前工作目录中名为file的文件

"..\\file" - 这是父目录中的文件

"..\\otherdir\\file" - 这是一个名为otherdir的目录中的文件,与当前目录处于同一级别(我们不必知道我们在哪个目录中)。

编辑:readdir的自包含示例用法:

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

int main()
{
    DIR *dir;
    struct dirent *dp;
    char * file_name;
    dir = opendir(".");
    while ((dp=readdir(dir)) != NULL) {
        printf("debug: %s\n", dp->d_name);
        if ( !strcmp(dp->d_name, ".") || !strcmp(dp->d_name, "..") )
        {
            // do nothing (straight logic)
        } else {
            file_name = dp->d_name; // use it
            printf("file_name: \"%s\"\n",file_name);
        }
    }
    closedir(dir);
    return 0;
}

答案 1 :(得分:0)

避免使用其名称的文件。和..