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 ответа
.
это запись каталога для текущего каталога
..
является каталогом для каталога на один уровень выше в иерархии
Вы должны просто отфильтровать их, используя:
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;
}