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; }
避免使用其名称的文件。 和..