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

. 是当前目录的目录条目

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

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

 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  #include  #include  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; } 

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