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

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

Восстановить пароль Регистрация
 
jon_illien
2 / 2 / 1
Регистрация: 14.08.2012
Сообщений: 78
03.02.2013, 22:45     Рекурсивная функция вывода всех файлов и директорий #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
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2013, 22:45     Рекурсивная функция вывода всех файлов и директорий
Посмотрите здесь:

C++ Рекурсивная функция!
Рекурсивная функция C++
C++ Работа с деревом файлов/директорий
Рекурсивная функция для расчета суммы всех двузначных чисел C++
C++ Рекурсивная функция
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
03.02.2013, 23:15     Рекурсивная функция вывода всех файлов и директорий #2
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;
}
jon_illien
2 / 2 / 1
Регистрация: 14.08.2012
Сообщений: 78
03.02.2013, 23:31  [ТС]     Рекурсивная функция вывода всех файлов и директорий #3
спасибо!!! блин) про _findnext совем забыл)) "." и ".." - это текущая и внешняя директория?, но тогда почему они являются именем
C++
1
fileinfo->name
и для чего нужна проверка:
C++
1
&& strcmp(fileinfo->name, ".") != 0 && strcmp(fileinfo->name, ".."
, при выводе все равно отображаются "." ".."
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
04.02.2013, 00:40     Рекурсивная функция вывода всех файлов и директорий #4
Цитата Сообщение от jon_illien Посмотреть сообщение
, при выводе все равно отображаются "." ".."
поставь проверку, чтобы не выводило

Цитата Сообщение от jon_illien Посмотреть сообщение
это текущая и внешняя директория?, но тогда почему они являются именем
она самая
jon_illien
2 / 2 / 1
Регистрация: 14.08.2012
Сообщений: 78
04.02.2013, 02:42  [ТС]     Рекурсивная функция вывода всех файлов и директорий #5
благодарю за помощь)
Yandex
Объявления
04.02.2013, 02:42     Рекурсивная функция вывода всех файлов и директорий
Ответ Создать тему
Опции темы

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