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

Как добавить в вектор содержимое вложенных каталогов - C++

Восстановить пароль Регистрация
 
Wwarhazardd
0 / 0 / 0
Регистрация: 30.06.2013
Сообщений: 7
08.02.2014, 20:23     Как добавить в вектор содержимое вложенных каталогов #1
Здравствуйте, подскажите пожалуйста как добавить в вектор содержимое внутренних каталогов, а не только тех которые содержатся в указанной папке. Есть код, в котором в командной строке задаешь аргумент(нужную папку), аргумент argv[], далее содержимое указанно папки заносится в вектор и выводится, помогите пожалуйста дописать код так, что бы в вектор заносились все вложенные папки всех вложенных папок(то есть полное дерево каталогов). Заранее спасибо
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
46
47
48
49
50
51
52
53
54
55
#include <vector>
#include <algorithm>
#include <boost\filesystem.hpp>
using namespace std;
using namespace boost::filesystem;
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL,"rus");
    if (argc < 2)
    {
        cout << "Usage: tut4 path\n";
        return 1;
    }
 
    path p (argv[1]);   // p reads clearer than argv[1] in the following code
 
  try
  {
    if (exists(p))    // does p actually exist?
    {
      if (is_regular_file(p))        // is p a regular file?
        cout << p << " size is " << file_size(p) << '\n';
 
      else if (is_directory(p))      // is p a directory?
      {
        cout << p << " is a directory containing:\n";
 
        typedef vector<path> vec;             // store paths,
        vec v;                                // so we can sort them later
 
        copy(directory_iterator(p), directory_iterator(), back_inserter(v));
 
        sort(v.begin(), v.end());             // sort, since directory iteration
                                              // is not ordered on some file systems
 
        for (vec::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it)
        {
          cout << "   " << *it << '\n';
        }
      }
      else
        cout << p << " exists, but is neither a regular file nor a directory\n";
    }
    else
      cout << p << " does not exist\n";
  }
 
  catch (const filesystem_error& ex)
  {
    cout << ex.what() << '\n';
  }
 
  return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2014, 20:23     Как добавить в вектор содержимое вложенных каталогов
Посмотрите здесь:

C++ Добавить в конец первого файла содержимое второго файла
Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы C++
C++ Как добавить объект в вектор?
Как добавить в вектор приватный объект класса C++
Как добавить символ конца строки в вектор C++
как сделать неизвестное количество вложенных циклов C++
C++ Мне нужно ввести в программу данные с помощью ifstream и добавить их всех в вектор чтобы был список.
C++ Добавить вектор-столбец после всех столбцов, элементы которых образуют убывающую последовательность

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.02.2014, 02: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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <vector>
#include <algorithm>
#include <boost\filesystem.hpp>
using namespace std;
using namespace boost::filesystem;
 
void ProcessPath(const path& p)
{
  if (exists(p))    // does p actually exist?
  {
    if (is_regular_file(p))        // is p a regular file?
      cout << p << " size is " << file_size(p) << '\n';
 
    else if (is_directory(p))      // is p a directory?
    {
      //cout << p << " is a directory containing:\n";
      std::cout << p << std::endl;
 
      typedef vector<path> vec;             // store paths,
      vec v;                                // so we can sort them later
 
      copy(directory_iterator(p), directory_iterator(), back_inserter(v));
 
      sort(v.begin(), v.end());             // sort, since directory iteration
                                            // is not ordered on some file systems
 
      /*
      for (vec::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it)
      {
        cout << "   " << *it << '\n';
      }
      */
 
      for (vec::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it)
      {
        ProcessPath(*it);
      }
    }
    else
      cout << p << " exists, but is neither a regular file nor a directory\n";
  }
  else
    cout << p << " does not exist\n";
}
 
int main(int argc, char* argv[])
{
  /*
    setlocale(LC_ALL,"rus");
    if (argc < 2)
    {
        cout << "Usage: tut4 path\n";
        return 1;
    }
 
    path p (argv[1]);   // p reads clearer than argv[1] in the following code
    */
  path p = "d:\\tmp\\test\\";
 
  try
  {
    ProcessPath(p);
    /*
    if (exists(p))    // does p actually exist?
    {
      if (is_regular_file(p))        // is p a regular file?
        cout << p << " size is " << file_size(p) << '\n';
 
      else if (is_directory(p))      // is p a directory?
      {
        cout << p << " is a directory containing:\n";
 
        typedef vector<path> vec;             // store paths,
        vec v;                                // so we can sort them later
 
        copy(directory_iterator(p), directory_iterator(), back_inserter(v));
 
        sort(v.begin(), v.end());             // sort, since directory iteration
                                              // is not ordered on some file systems
 
        for (vec::const_iterator it(v.begin()), it_end(v.end()); it != it_end; ++it)
        {
          cout << "   " << *it << '\n';
        }
      }
      else
        cout << p << " exists, but is neither a regular file nor a directory\n";
    }
    else
      cout << p << " does not exist\n";
      */
  }
 
  catch (const filesystem_error& ex)
  {
    cout << ex.what() << '\n';
  }
 
  return 0;
}
Yandex
Объявления
09.02.2014, 02:15     Как добавить в вектор содержимое вложенных каталогов
Ответ Создать тему
Опции темы

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