web-dev-qa-db-ja.com

ファイルではなくドットで始まるreaddir()

少し問題があります。ディレクトリからファイルを読み取っていて動作しますが、最初に2つの余分なファイルを読み取ります...それは何ですか?たとえば、ファイルのリストがあります:"A348", "A348A", "A348B"そしてこれは私が得るものです:".", "..", "A348", "A348A", "A348B" ???

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

        file_name = dp->d_name;            
}
6
user3036674

.は、現在のディレクトリのディレクトリエントリです。

..は、階層の1つ上のレベルのディレクトリのディレクトリエントリです。

以下を使用して、それらを除外する必要があります。

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;
}
19
nio

名前が。のファイルは使用しないでください。および..

0
Srikanth