С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Loks
0 / 0 / 0
Регистрация: 06.07.2014
Сообщений: 14
#1

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

11.07.2014, 12:29. Просмотров 395. Ответов 8
Метки нет (Все метки)

Всем привет, понадобилось заиметь список файлов в директории, нашел на этом форуме программу
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;
}
Все работает, только вывод получается как в аттаче.
Объясните, откуда берутся эти точки? Я убрал их добавлением условия проверки на количество символов, но может можно это исправить без добавления такого условия?
0
Миниатюры
Непонятные элементы в выводе списка файлов директории  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2014, 12:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятные элементы в выводе списка файлов директории (C++):

Вывод списка файлов из директории - C++
Доброе время суток. Возникла проблема, мне необходимо осуществить вывод списка файлов из определенной директории(задается пользователем),...

Вывод списка файлов из выбранной директории - C++
Необходимо вывести на экран список файлов из директории, заданной пользователем. // ConsoleApplication3.cpp: определяет точку входа...

Вывод списка файлов и папок директории - C++
Доброго времени суток! Помогите пожалуйста написать функцию, описанную ниже. Функция: Вход: строка(адрес) E:\Games\Distributives\ ...

Чтение списка файлов из директории, их открытие и обработка - C++
Доброго времени суток! Написал программу, которая будет открывать нужную папку, считывать все файлы из нее (все имеют формат .txt и потом...

Аналог ls (вывод списка папок и файлов в заданной директории) - C++
как сделать, чтобы программа выводила список папок и файлов в заданной директории?

Как убрать лишние символы при выводе в консоль списка файлов? - C++
Поясните, пожалуйста. Собираю кроссплатформенные методы, для работы с файлами. Взял для разбора такой метод. Всё работает, только вот...

8
zss
Модератор
Эксперт С++
6587 / 6149 / 2025
Регистрация: 18.12.2011
Сообщений: 16,034
Завершенные тесты: 1
11.07.2014, 13:26 #2
Точка - это текущая директория
Две точки - родительская директория
1
John Prick
824 / 757 / 152
Регистрация: 27.07.2012
Сообщений: 2,156
Завершенные тесты: 3
11.07.2014, 13:29 #3
Цитата Сообщение от Loks Посмотреть сообщение
Я убрал их добавлением условия проверки на количество символов, но может можно это исправить без добавления такого условия?
Фильтруйте конкретно директории . и ..
0
zss
Модератор
Эксперт С++
6587 / 6149 / 2025
Регистрация: 18.12.2011
Сообщений: 16,034
Завершенные тесты: 1
11.07.2014, 13:31 #4
Цитата Сообщение от John Prick Посмотреть сообщение
Удаляйте конкретно директории . и ...
Тогда удалится и содержимое соответствующих директорий (текущей или родительской)!
Не думаю, что ТС будет этому рад.
0
John Prick
824 / 757 / 152
Регистрация: 27.07.2012
Сообщений: 2,156
Завершенные тесты: 3
11.07.2014, 13:33 #5
zss, я не правильно выразился. Исправил
0
Loks
0 / 0 / 0
Регистрация: 06.07.2014
Сообщений: 14
11.07.2014, 14:22  [ТС] #6
John Prick,
Фильтруйте конкретно директории . и ..
Подскажите, как можно это сделать? Если честно, я не очень понимаю алгоритм работы этого кода.
Только до того момента, когда в переменную filename записывается либо точка, либо аргумент из командно строки.
0
John Prick
824 / 757 / 152
Регистрация: 27.07.2012
Сообщений: 2,156
Завершенные тесты: 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, когда обход каталога завершён.
1
Loks
0 / 0 / 0
Регистрация: 06.07.2014
Сообщений: 14
11.07.2014, 16:12  [ТС] #8
John Prick, спасибо!
0
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
11.07.2014, 16:15 #9
Loks, . и .. всегда вначале, поэто при вызове readdir делайте 2 холостых вызова(не читайте значения), а следующие вызовы уже дадут содержимое
0
11.07.2014, 16:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2014, 16:15
Привет! Вот еще темы с ответами:

Непонятные цифры при выводе - C++
Делаю задачу по структурам. В условии задачи есть пункт, где нужно реализовать вывод данных. То есть, я записал через структуру, например,...

Непонятные символы при выводе - C++
Я уже такую фигню много раз наблюдал типа если не поставить '\0' или убрать при выводе какие то непонятные символы идут от пример. ...

При выводе динамической матрицы выводятся непонятные цифры - C++
данная программа считает суммы строк двумерного массива. но при выводе массива, который хранит их выводятся непонятные цифры( как я...

Непонятные символы при выводе русских символов в консоли - C++
Доброго времени суток, у меня возникла проблема. Когда я ввожу текст с клавиатуры, при выводе его на экран выводит непонятные символы....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.