少し問題があります。ディレクトリからファイルを読み取っていて動作しますが、最初に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;
}
.
は、現在のディレクトリのディレクトリエントリです。
..
は、階層の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;
}
名前が。のファイルは使用しないでください。および..