Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Построение дерева каталога диска в TreeView на C++Builder / 14 сообщений из 14, страница 1 из 1
11.03.2015, 14:20
    #38901359
alex_dss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
Всё в этом мире уже когда где то происходило, но при всём при этом обращаюсь за помощью.

Задача до боли проста - это часть каталога диска надо поместить в компонент TreeView( только папки,без файлов ). Используя собственные знание и интернет практически решена, но структура выводится не в том порядке в каком надо. Если кому не трудно, укажите нерадивому, то биш мне, ошибку в коде, А ТО ВРЕМЯ ЖМЁТ НЕЩАДНО, ЗАРАНЕЕ БЛАГОДАРЕН .
Перелопатил инет, ответа не нашёл.

Вот собственно и сам код:
Код: plaintext
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.
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

AnsiString Src;
TTreeNode *Node;
AnsiString Dir1;
int n=0;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------

//

void __fastcall TForm1::Button1Click(TObject *Sender)
{

Dir1 = "D:\\" ;
int n=0;
TreeView1->Items->Add(NULL,Dir1);
Node=Form1->TreeView1->Items->Item[n];
CreateTreeView(Dir1, Node);
}
//---------------------------------------------------------------------------



void __fastcall TForm1::CreateTreeView(AnsiString Dir, TTreeNode *Root)
{
    TSearchRec sr;
    Src = Dir;

    if (FindFirst(Src+"\\*", faAnyFile, sr) == 0)
    {
	do
        {
	    if (sr.Name!=".")
            if (sr.Name!="..")
	    {
               Dir =  Src+"\\"+sr.Name;
               Root = TreeView1->Items->AddChild(Root,sr.Name);
               //
  	      CreateTreeView(Dir, Root);  // РЕКУРСИВНЫЙ ВЫЗОВ
             n++;
	    }

          } while (FindNext(sr) == 0);
    FindClose(sr);
 }
}


надо в файл Unit1.h добаввить:
Код: plaintext
1.
void __fastcall CreateTreeView(AnsiString Dir, TTreeNode *Root);
...
Рейтинг: 0 / 0
11.03.2015, 14:29
    #38901372
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
Что значит "не в том порядке". В коде негде сортировки не видно, т.ч. порядок должен быть "по умолчанию" ))) /как ос на жесткий диск положит/
...
Рейтинг: 0 / 0
11.03.2015, 14:32
    #38901378
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
alex_dss, если это NTFS - то порядок файлов и каталогов будет (приблизительно) алвавитный.
Если FAT (флешка) - то возможен случайный порядок. Возможен также вариант что сам компонент
TreeView1 имеет свои преференции и настройки по сортировке элементов.

Вобщем в этом уравнении много неизвестных и постарайся эти неизвестные раскрыть.

P.S. По сабжу С++ Builder - не очень популярная среда и мало кто помнит как оно внутре и что там к чему.
Вобщем помогай нам чтоб мы тебе помогли.
...
Рейтинг: 0 / 0
11.03.2015, 14:33
    #38901379
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
alex_dss,

Так ты вообще никакой порядок не задаёшь, вот :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    if (FindFirst(Src+"\\*", faAnyFile, sr) == 0)
    {
	do
        {
	    if (sr.Name!=".")
            if (sr.Name!="..")
	    {
               Dir =  Src+"\\"+sr.Name;
               Root = TreeView1->Items->AddChild(Root,sr.Name);



Приходит всё в дерево ровно в том виде, в котором записи выдаёт FindFirst.

Соответственно, чтобы задать какой-то порядок, нужно накопить эти записи в
какую-то структуру данных, а потом её отсортировать в нужном порядке, и
после этого уже записывать в TreeView1.
...
Рейтинг: 0 / 0
11.03.2015, 14:50
    #38901412
alex_dss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
Leonid Kudryavtsev,

может неправильно выразился, сортировка никакая не нужна , просто надо в TreeView вывести структуру каталога с подпапками, а у меня получается что подпапки выводятся не в тех местах где надо, т.е. нарушена структура подчинения.
Допустим на диске есть папка Temp со множеством вложенных папок, так вот при выводе в TreeView надо чтобы эта структура подчинения сохранилась.
...
Рейтинг: 0 / 0
11.03.2015, 15:00
    #38901427
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
alex_dssпри выводе в TreeView надо чтобы эта структура подчинения сохранилась.так ты в своей функции всё время Root перезаписываешь, а потом удивляешься, что структура поломалась.
...
Рейтинг: 0 / 0
11.03.2015, 15:00
    #38901431
alex_dss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
mayton,

может неправильно выразился, сортировка никакая не нужна , просто надо в TreeView вывести структуру каталога с подпапками, а у меня получается что подпапки выводятся не в тех местах где надо, т.е. нарушена структура подчинения.
Допустим на диске есть папка Temp со множеством вложенных папок, так вот при выводе в TreeView надо чтобы эта структура подчинения сохранилась.

в общем в TreeView должна получится часть диска начинаяя от определённой заданной папки с точно такой же структурой подчинения как и надиске
...
Рейтинг: 0 / 0
11.03.2015, 15:02
    #38901436
alex_dss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
egorych,
собственно поэтому и написал на форум с просьбой помочь
...
Рейтинг: 0 / 0
11.03.2015, 15:05
    #38901450
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
alex_dssegorych,
собственно поэтому и написал на форум с просьбой помочьтак заведи в цикле отдельную переменную под то, что тебе возвращает AddChild и в рекурсивном вызове используй её, а не тот Root, который тебе в функцию пришёл
...
Рейтинг: 0 / 0
11.03.2015, 15:33
    #38901487
alex_dss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
egorychalex_dssegorych,
собственно поэтому и написал на форум с просьбой помочьтак заведи в цикле отдельную переменную под то, что тебе возвращает AddChild и в рекурсивном вызове используй её, а не тот Root, который тебе в функцию пришёл

а примерчик если можно, а то в теории я это знаю, а как вот реализовать, нет
...
Рейтинг: 0 / 0
12.03.2015, 10:31
    #38902114
alex_dss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
Разобрался сам, за помощ не спасибо, тема закрыта
...
Рейтинг: 0 / 0
12.03.2015, 12:05
    #38902243
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
alex_dssРазобрался самумница, так держать )))
...
Рейтинг: 0 / 0
12.03.2015, 12:13
    #38902253
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
Он сказал "мне спасибо" или "неспасибо".?
...
Рейтинг: 0 / 0
12.03.2015, 12:46
    #38902312
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Построение дерева каталога диска в TreeView на C++Builder
maytonОн сказал "мне спасибо" или "неспасибо".?

"неспасибо" -- такого слова нет, значит "он сказал тебе спасибо".
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Построение дерева каталога диска в TreeView на C++Builder / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]