Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
#1

как мне обойти все подкаталоги данного каталога.? - C++

10.05.2010, 00:31. Просмотров 1615. Ответов 21
Метки нет (Все метки)

помогите плз разобраться с директориями.
вот как мне обойти все подкаталоги данного каталога.?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2010, 00:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос как мне обойти все подкаталоги данного каталога.? (C++):

Обойти все элементы вектора
Как обойти все элементы вектора? Предложите пожалуйста 2 способа

Обойти по спирали все элементы матрицы 6x6
C++ Начиная с центра, обойти по спирали все элементы матрицы 6x6,...

Обойти конём все поля шахматной доски
Обойти конём все поля шахматной доски размером (n х n) клеток, побывав на...

Начиная от центра, обойти по спирали все элементы квадратной матрицы
Доброго времени, помогите создать программу на Си/С++ Задание: Начиная от...

Начиная с центра, обойти по спирали все элементы квадратной матрицы
В целочисленной квадратной матрице nxn (3<=n<=101, n - нечетное) - найти номер...

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

21
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
10.05.2010, 00:34 #2
genius5, открыл каталог, прочитал файлы, если среди них каталог, то к пути прибавил его имя и в него вошел. И так рекурсивно по всему дереву. Это тривиально.
0
genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
10.05.2010, 00:43  [ТС] #3
легко сказать я еще не работад с каталогами,многого не знаю.
ну ету часть с деревьями можно поподробнее?
0
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
10.05.2010, 00:46 #4
зависить от системы и используемых средств - windows, linux, winapi, mfc, qt..
0
genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
10.05.2010, 00:57  [ТС] #5
windows
0
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
10.05.2010, 01:01 #6
Цитата Сообщение от genius5 Посмотреть сообщение
ну ету часть с деревьями можно поподробнее?
Что же все разжевывать-то...
Вот у тебя директория dir1, прочитал, какие файлы в ней. взял тип файла file1 круто, обычный файл. Взял типа файла dir2, опана, директория, значит идем в dir1\\dir2.
Функции для операций с файлами можно найти в документации по winapi. Может, в вантузе есть аналог nftw, но я о нем не слышал
0
genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
10.05.2010, 01:07  [ТС] #7
а как потом назад вернуться?
0
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
10.05.2010, 01:09 #8
genius5, функция должна быть рекурсивной. Выполнение кода само вернется назад, когда завершатся функции, для подкаталогов. Рекурсия.
1
niXman
Эксперт С++
3202 / 1451 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.05.2010, 01:40 #9
вай-вай-вай
уже бы в гугле код нарыл
0
genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
10.05.2010, 11:11  [ТС] #10
тада скинь плиз ссылку.

Добавлено через 8 часов 18 минут
ну никак не получается
напишите эту часть проги плз

Добавлено через 1 час 0 минут
аууууу
0
ISergey
Maniac
Эксперт С++
1408 / 919 / 148
Регистрация: 02.01.2009
Сообщений: 2,747
Записей в блоге: 1
10.05.2010, 18:27 #11
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
#include <iostream>
#include <string>
#include <windows.h>
 
void func_(const std::string &dir, const std::string &r){
     static std::string _dir;
    _dir = dir + r;
 
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = FindFirstFile(_dir.c_str(), &FindFileData);
 
    FindNextFile(hFind, &FindFileData); // 
 
    while(FindNextFile(hFind, &FindFileData))
    {
        if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY){
            _dir = dir + FindFileData.cFileName + "\\";
            std::cout << "Folder: " << _dir << std::endl;
            func_(_dir.c_str(), r);
        } else 
            std::cout << "File: " << FindFileData.cFileName << std::endl;
    }
 
    FindClose(hFind);
}
 
int main(){
 
    func_("C:\\", "*.*");
    return 0;
}
0
genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
10.05.2010, 18:39  [ТС] #12
а на С это как будет выглядеть?
0
ISergey
Maniac
Эксперт С++
1408 / 919 / 148
Регистрация: 02.01.2009
Сообщений: 2,747
Записей в блоге: 1
10.05.2010, 18:41 #13
Цитата Сообщение от genius5 Посмотреть сообщение
а на С это как будет выглядеть?
примерно также...
0
genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
10.05.2010, 18:44  [ТС] #14
а комменты можно?все еще не все понимаю.
0
ISergey
Maniac
Эксперт С++
1408 / 919 / 148
Регистрация: 02.01.2009
Сообщений: 2,747
Записей в блоге: 1
10.05.2010, 18:53 #15
Цитата Сообщение от genius5 Посмотреть сообщение
а комменты можно?все еще не все понимаю.
так три строчки кода.. что имено не понятно?
0
genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
10.05.2010, 19:11  [ТС] #16
у меня вопрос
как в С определить это папка или нет?
0
ISergey
Maniac
Эксперт С++
1408 / 919 / 148
Регистрация: 02.01.2009
Сообщений: 2,747
Записей в блоге: 1
10.05.2010, 19:21 #17
Вот на С
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
#include <windows.h>
#include <stdio.h>
 
void func_(char *dir, char *r){
    char _dir[MAX_PATH];
    strcpy(_dir, dir);
    strcat(_dir, r);
 
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = FindFirstFile(_dir, &FindFileData);
 
    FindNextFile(hFind, &FindFileData); // 
 
    while(FindNextFile(hFind, &FindFileData))
    {
        if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY){ /*Проверка на то что это папка*/
            strcpy(_dir, dir);
            strcat(_dir, FindFileData.cFileName);
            strcat(_dir, "\\");
            printf("Folder: %s\n", _dir);
 
            func_(_dir, r);
 
        } else 
            printf("File: %s\n", FindFileData.cFileName);
    }
 
    FindClose(hFind);
}
 
int main(){
 
    func_("C:\\", "*.*");
    return 0;
}
0
genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
10.05.2010, 19:26  [ТС] #18
не пашет ошибки выдает,ну так как в С определить это папка или нет?
0
niXman
Эксперт С++
3202 / 1451 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.05.2010, 19:32 #19
ISergey, ты не устал?
0
genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
10.05.2010, 19:34  [ТС] #20
)
)))надеюсь нет)
0
10.05.2010, 19:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2010, 19:34
Привет! Вот еще темы с решениями:

Определить последовательность ходов, которая позволит обойти все поля и вернуться на исходную.
Помогите решить задачу... Очень сильно нужно!! Задача: Вводится начальная...

Начиная с центра, обойти по спирали все элементы квадратной матрицы, распечатывая их в порядке обхода
Начиная с центра, обойти по спирали все элементы квадратной матрицы...

Сформировать два множества, первое содержит все простые числа из данного множества, второе - все составные
Условие задачи следующее:Имеется множество, содержащее натуральные числа из...

Используя команду DIR, вывести на экран только каталоги текущего каталога и все его подкаталоги
1. Используя команды DIR добиться , чтобы на экран выводились только каталоги...


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

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

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