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

Задача до боли проста - это часть каталога диска надо поместить в компонент 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
Построение дерева каталога диска в TreeView на C++Builder
    #38901372
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит "не в том порядке". В коде негде сортировки не видно, т.ч. порядок должен быть "по умолчанию" ))) /как ос на жесткий диск положит/
...
Рейтинг: 0 / 0
Построение дерева каталога диска в TreeView на C++Builder
    #38901378
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_dss, если это NTFS - то порядок файлов и каталогов будет (приблизительно) алвавитный.
Если FAT (флешка) - то возможен случайный порядок. Возможен также вариант что сам компонент
TreeView1 имеет свои преференции и настройки по сортировке элементов.

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

P.S. По сабжу С++ Builder - не очень популярная среда и мало кто помнит как оно внутре и что там к чему.
Вобщем помогай нам чтоб мы тебе помогли.
...
Рейтинг: 0 / 0
Построение дерева каталога диска в TreeView на C++Builder
    #38901379
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Построение дерева каталога диска в TreeView на C++Builder
    #38901412
alex_dss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

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

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

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

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

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


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