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

Про хранение данных. - C++

Восстановить пароль Регистрация
 
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
23.02.2012, 19:08     Про хранение данных. #1
день добрый.
в задаче задается иерархия папок и файлов, то есть корневая, что в ней и т.д.
к примеру -
/andew (корневая)
andrew papka1 papka2 somefile.txt
papka1 somefile1.txt
papka2 papka3
papka3 123.avi

задается корень, а дальше название папки и через пробел что в ней. не обязательно в правильном порядке, т.е. корень можешь задаваться хоть последним.

решил хранить в таком виде -
C++
1
2
3
4
5
6
7
8
class Tree {
public:
    Tree() : parent(NULL) {}
    ~Tree();
    std::string str;
    Tree *parent;
    std::vector <Tree *> sons;
};
раньше я с деревьями не особо работал, поэтому как правильно в деструкоторе уничтожить все дерево, и нужно ли это в этом случае? и как мне считать папки подобным образом?
или есть более лучший способ хранения?

спасибо.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2012, 19:08     Про хранение данных.
Посмотрите здесь:

Хранение данных C++
Хранение данных C++
хранение данных в файле C++
C++ Хранение данных в программе
Киносеанс - хранение данных, замена данных, добавленных новых C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
23.02.2012, 19:58     Про хранение данных. #2
Какова окончательная цель? Как именно вы хотите хранить?(Чтобы сохранялась иерархия)
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
23.02.2012, 20:08  [ТС]     Про хранение данных. #3
ну корневая папка это вершина дерева, далее от вершины узлы, это то, что находится в папке и т.д.
суть задачи в том, чтобы "реализовать мини - эмулятор консоли, команды cd, ls, echo".
cd name - перейти из текущей в папку name, затем вывести путь.
ls - вывод содержимого файла
echo text - вывести text на экран.

вот конечная цель.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
23.02.2012, 21:49     Про хранение данных. #4
Несмотря на то, что каталоги по сути тоже файлы, то можно сделать так:
C++
1
2
3
4
5
6
struct node
{
   std::string name; // Имя каталога или файла
   std::vector<node*> next; // Ссылки на вложенные каталоги и файлы
// Если первый элемент вектора == NULL, то это файл, иначе каталог
}
Я бы сделал как-то так.

Добавлено через 1 минуту
Цитата Сообщение от neske Посмотреть сообщение
cd name - перейти из текущей в папку name, затем вывести путь.
Необходимо помнить текущий каталог.

Добавлено через 42 секунды
Цитата Сообщение от neske Посмотреть сообщение
ls - вывод содержимого файла
C++
1
std::copy(...); // Предполагаю, догадаетесь как вывести содержимое векторы
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
23.02.2012, 21:56  [ТС]     Про хранение данных. #5
go, спасибо.
но мне кажется в структуру надо добавить указатель на родителя, т. к. в задаче при команде cd нужно еще полный путь до новой директории выводить.

и как сделать сам ввод данных, на простом примере -
/root
root dir1 dir2

C++
1
2
3
node nd, *cur;
// создали вершину root, cur сейчас указывает на root.
// как правильно добавить dir1 и dir2 в вектор указателей вершины root?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
23.02.2012, 22:08     Про хранение данных. #6
Цитата Сообщение от neske Посмотреть сообщение
но мне кажется в структуру надо добавить указатель на родителя,
Для возврата на одну директорию выше? Не думал об этом.

Цитата Сообщение от neske Посмотреть сообщение
// как правильно добавить dir1 и dir2 в вектор указателей вершины root?
Ума не приложу, как именно вам необходимо создавать каталоги и файлы в них. Я бы реализовал упрощенный вариант mkdir и cat.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2012, 23:48     Про хранение данных.
Еще ссылки по теме:

Хранение данных в vector'e C++
Разнообразное хранение данных C++
Хранение статистических данных C++

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

Или воспользуйтесь поиском по форуму:
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
23.02.2012, 23:48  [ТС]     Про хранение данных. #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
получилось сделать так, работает -
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 <iostream>
#include <string>
#include <vector>
 
class Tree {
public:
    Tree() : parent(NULL) {}
    void add(std::string str) {
        Tree *temp = new Tree;
        temp->name = str;
        temp->parent = this;
        sons.push_back(temp);
    }
 
    void ls() {
        for(int i = 0; i < sons.size(); ++i)
            std::cout << sons[i]->name << " ";
    }
 
    std::string name;
    Tree *parent;
    std::vector <Tree *> sons;
};
 
int main() {
    Tree tree, *cur;
    tree.name = "root";
    cur = &tree;
 
    cur->add("dir1");
    cur->add("dir2");
    cur->ls();
 
    return 0;
}
Добавлено через 5 минут
Хотя, если не ошибаюсь, в этой задаче вообще можно не заморачиваться с деревом.
Yandex
Объявления
23.02.2012, 23:48     Про хранение данных.
Ответ Создать тему
Опции темы

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