Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
3 / 3 / 1
Регистрация: 14.08.2012
Сообщений: 78

Рекурсивная функция вывода всех файлов и директорий

03.02.2013, 22:45. Показов 2134. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
функция ищет все файлы включая директории с набором др. файлов и директорий при этом выводит их на экран.
Вместо того, чтобы вывести файлы директории, бесконечно выводит точку. посмотрите пожалуйста) :

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
int SearchAll(char *path)                        //приходит имя диска (f:\) и в последствии добавляется маска "*"
{
    char* temp_path = new char[strlen(path) + 1];       //добавляет к пути маску "*"
    strcpy(temp_path, path);                            //для поиска всех файлов
    strcat(temp_path, "*");                             //
 
    _finddata_t* fileinfo = new _finddata_t;            //указатель на объект структуры с информацией на файл
    long done;                                          //уникальный номер группы файлов в памяти
    long there_is_a_file;                               //для проверки: существует следующий файл?
    int count = 0;                                      //счетчик файлов
 
    done = _findfirst(temp_path, fileinfo);             //поиск файлов по указанному пути и маске, запись в структуру
    there_is_a_file = done;                             //fileinfo информации о первом найденном файле 
    
    while(there_is_a_file != -1)                        //если в списке есть файл
    {
        if(fileinfo->attrib == _A_SUBDIR)               //если это директория
        {
            cout << fileinfo->name << endl;
 
            char* transition_path = new char[strlen(path) + 4 + strlen(fileinfo->name)];   4 - две пары слешей 
            
            strcpy(transition_path, path);
            strcat(transition_path, "\\");
            strcat(transition_path, fileinfo->name);
            strcat(transition_path, "\\");
 
            count += SearchAll(transition_path);
            count++;
 
            delete []transition_path;
        }
        else                                                                          //соответственно не директория
        {
            cout << fileinfo->name << endl;
            count++;
        }
    }
 
    delete fileinfo;
    _findclose(done);
    
    return count;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.02.2013, 22:45
Ответы с готовыми решениями:

Как сделать вывод всех файлов файлов и директорий с данными о каждом файле?
Необходимо вывести все директории и файлы по указанному пути рекурсией + к каждому файлу вывести информацию, типа дата создания/изменения,...

Рекурсивная функция вывода данных из БД
Доброго времени суток!Столкнулся с проблемой поиска и дальнейшего вывода данных из базы данных. Вдоваться в подробности не буду, объясню...

Рекурсивная функция для вывода массива
Напишите рекурсивную функцию для вывода массива в следующем порядке. ......... ......... Входные данные: 5 1 5 7 8...

4
 Аватар для m1Rr0r
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
03.02.2013, 23:15
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
int SearchAll(char *path)                        //приходит имя диска (f:\) и в последствии добавляется маска "*"
{
    char* temp_path = new char[strlen(path) + 1];       //добавляет к пути маску "*"
    strcpy(temp_path, path);                            //для поиска всех файлов
    strcat(temp_path, "*");                             //
 
    _finddata_t* fileinfo = new _finddata_t;            //указатель на объект структуры с информацией на файл
    long done;                                          //уникальный номер группы файлов в памяти
    long there_is_a_file;                               //для проверки: существует следующий файл?
    int count = 0;                                      //счетчик файлов
 
    done = _findfirst(temp_path, fileinfo);             //поиск файлов по указанному пути и маске, запись в структуру
    there_is_a_file = done;                             //fileinfo информации о первом найденном файле 
    
    while(there_is_a_file != -1)                        //если в списке есть файл
    {
        if(fileinfo->attrib == _A_SUBDIR && strcmp(fileinfo->name, ".") != 0 && strcmp(fileinfo->name, "..") != 0)               //если это директория
        {
            cout << fileinfo->name << endl;
 
            char* transition_path = new char[strlen(path) + 4 + strlen(fileinfo->name)];//   4 - две пары слешей 
            
            strcpy(transition_path, path);
            strcat(transition_path, "\\");
            strcat(transition_path, fileinfo->name);
            strcat(transition_path, "\\");
 
            count += SearchAll(transition_path);
            count++;
 
            delete []transition_path;
        }
        else                                                                          //соответственно не директория
        {
            cout << fileinfo->name << endl;
            count++;
        }
        there_is_a_file = _findnext(done, fileinfo); 
    }
 
    delete fileinfo;
    _findclose(done);
    
    return count;
}
1
3 / 3 / 1
Регистрация: 14.08.2012
Сообщений: 78
03.02.2013, 23:31  [ТС]
спасибо!!! блин) про _findnext совем забыл)) "." и ".." - это текущая и внешняя директория?, но тогда почему они являются именем
C++
1
fileinfo->name
и для чего нужна проверка:
C++
1
&& strcmp(fileinfo->name, ".") != 0 && strcmp(fileinfo->name, ".."
, при выводе все равно отображаются "." ".."
0
 Аватар для m1Rr0r
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
04.02.2013, 00:40
Цитата Сообщение от jon_illien Посмотреть сообщение
, при выводе все равно отображаются "." ".."
поставь проверку, чтобы не выводило

Цитата Сообщение от jon_illien Посмотреть сообщение
это текущая и внешняя директория?, но тогда почему они являются именем
она самая
1
3 / 3 / 1
Регистрация: 14.08.2012
Сообщений: 78
04.02.2013, 02:42  [ТС]
благодарю за помощь)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.02.2013, 02:42
Помогаю со студенческими работами здесь

ошибка идентификатор не определен,рекурсивная функция вывода
не могу понять в чем ошибка знающие проверьте рекурсивную функцию она должна выводить значения массива ...

Рекурсивная функция вывода ряда в обратном порядке
Написать рекурсивную функцию вывода рядка в обратном порядке

По данному списку файлов составьте список всех директорий
Прошу помочь с заданием выполняемым на одной тестовой площадке, где основная часть программы скрыта: &quot; Список директорий ...

Рекурсивная функция для вывода на экран следующей картинки
Добрый день, помогите с задачей. Заранее всем спасибо! Дано натуральное число n . Разработать рекурсивную функцию для вывода на экран...

Рекурсивная функция для вывода цифр натурального числа в обратном порядке
написать рекурсивную функцию для вывода на экран цифр натурального числа в обратном порядке. помогите пожалуйстаа:)


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru