Форум программистов, компьютерный форум CyberForum.ru

Непонятные элементы в выводе списка файлов директории - C++

Восстановить пароль Регистрация
 
Loks
0 / 0 / 0
Регистрация: 06.07.2014
Сообщений: 14
11.07.2014, 12:29     Непонятные элементы в выводе списка файлов директории #1
Всем привет, понадобилось заиметь список файлов в директории, нашел на этом форуме программу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <dirent.h>
#include <string.h>
 
//~ #define NAME_MAX 256
 
int main(int argc, char **argv)
{
    DIR *dfd;
    struct dirent *dp;
    char filename[NAME_MAX];
 
    if ( argc < 2 )
        strcpy(filename, ".");
    else
        strcpy(filename, argv[1]);
 
    printf("%s\n\n", filename);
    dfd=opendir(filename);
 
    while( (dp=readdir(dfd)) != NULL )
            printf("%s\n", dp->d_name);
 
    closedir(dfd);
    return 0;
}
Все работает, только вывод получается как в аттаче.
Объясните, откуда берутся эти точки? Я убрал их добавлением условия проверки на количество символов, но может можно это исправить без добавления такого условия?
Миниатюры
Непонятные элементы в выводе списка файлов директории  
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
11.07.2014, 13:26     Непонятные элементы в выводе списка файлов директории #2
Точка - это текущая директория
Две точки - родительская директория
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
11.07.2014, 13:29     Непонятные элементы в выводе списка файлов директории #3
Цитата Сообщение от Loks Посмотреть сообщение
Я убрал их добавлением условия проверки на количество символов, но может можно это исправить без добавления такого условия?
Фильтруйте конкретно директории . и ..
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
11.07.2014, 13:31     Непонятные элементы в выводе списка файлов директории #4
Цитата Сообщение от John Prick Посмотреть сообщение
Удаляйте конкретно директории . и ...
Тогда удалится и содержимое соответствующих директорий (текущей или родительской)!
Не думаю, что ТС будет этому рад.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
11.07.2014, 13:33     Непонятные элементы в выводе списка файлов директории #5
zss, я не правильно выразился. Исправил
Loks
0 / 0 / 0
Регистрация: 06.07.2014
Сообщений: 14
11.07.2014, 14:22  [ТС]     Непонятные элементы в выводе списка файлов директории #6
John Prick,
Фильтруйте конкретно директории . и ..
Подскажите, как можно это сделать? Если честно, я не очень понимаю алгоритм работы этого кода.
Только до того момента, когда в переменную filename записывается либо точка, либо аргумент из командно строки.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
11.07.2014, 14:30     Непонятные элементы в выводе списка файлов директории #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
while( (dp=readdir(dfd)) != NULL )
{
    if ((dp->d_name[0] == '.') &&
            ((dp->d_name[1] == '\0') ||
                 ((dp->d_name[1] == '.') && (dp->d_name[2] == '\0'))))
        continue;
    printf("%s\n", dp->d_name);
}
Добавлено через 2 минуты
Цитата Сообщение от Loks Посмотреть сообщение
Если честно, я не очень понимаю алгоритм работы этого кода.
readdir при каждом обращении возвращает указатель на структуру, которая содержит поле d_name, где хранится имя очередного файла или подкаталога в текущей директории. Либо возвращает NULL, когда обход каталога завершён.
Loks
0 / 0 / 0
Регистрация: 06.07.2014
Сообщений: 14
11.07.2014, 16:12  [ТС]     Непонятные элементы в выводе списка файлов директории #8
John Prick, спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2014, 16:15     Непонятные элементы в выводе списка файлов директории
Еще ссылки по теме:

Сформировать список L, включив в него положительные элементы списка L1 и отрицательные элементы списка L2 C++
C++ Аналог ls (вывод списка папок и файлов в заданной директории)
C++ Вывод списка файлов из выбранной директории

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.07.2014, 16:15     Непонятные элементы в выводе списка файлов директории #9
Loks, . и .. всегда вначале, поэто при вызове readdir делайте 2 холостых вызова(не читайте значения), а следующие вызовы уже дадут содержимое
Yandex
Объявления
11.07.2014, 16:15     Непонятные элементы в выводе списка файлов директории
Ответ Создать тему
Опции темы

Текущее время: 17:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru