Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 61

Отобразить в ListView папки и файлы класса

09.04.2023, 17:56. Показов 603. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
В классе есть 2 объекта.
C#
1
2
public BindingList<SFNPath> PathsProjects  { get; set; }
        public BindingList<SFNPath> Projects { get; set; }
PathsProjects содержит список папок с файлами.
Projects - содержит список файлов.
SFNPath - класс содержащий поля Name и Path.
Нужно в ListView отобразить имена файлов из 2х этих списков приблизительно в таком формате.
Code
1
2
3
4
5
6
7
8
9
Файл 1
Файл 2
Файл 3
Папка 1
... Файл 4
Папка 2
... Файл 5
Папка 3
... Файл 6
Ну и соответственно мне бы хотелось знать как по селекту ListView можно было бы получать полное имя файла тобишь Path. Просто тут 2 отдельных списка. Список PathsProjects содержит папки с проектами а список Projects содержит проекты отдельно. И не те что могут быть в PathsProjects.
Я затрудняюсь это решить максимально эффективно а не городить кучу циклов. ListView не должен отображать полное имя а только поле Name.

Добавлено через 3 часа 29 минут
Короче я немного тут подумал и сделал так.
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
public List<SFNPath> AllDirProjects
        {
            get
            {
                var list = new List<SFNPath>();
 
                foreach (var project in PathsProjects)
                {
                    foreach (var dir in Directory.GetDirectories(project.Path, "", SearchOption.TopDirectoryOnly))
                    {
                        var listFile = Directory.GetFiles(dir, $"*{General.Ext[(byte)Type]}");
 
                        if (listFile.Length <= 0)
                            continue;
 
                        list.Add(new SFNPath(Path.GetFileName(dir), dir));
                    }
                }
 
                foreach (var dir in Projects)
                {
                    var listFile = Directory.GetFiles(dir.Path, $"*{General.Ext[(byte)Type]}");
 
                    if (listFile.Length <= 0)
                        continue;
 
                    list.Add(new SFNPath(dir.Name, dir.Path));
                }
                
                return list;
            }
        }
Это код по сути объединяет все проекты из обоих списков в 1 список.
В ListView нужно отобразить эти папки проектов включая все подкатологи и файлы. Желательно отображая иконки. Как это лучше реализовать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.04.2023, 17:56
Ответы с готовыми решениями:

Папки и файлы в Listview
Надо сделать файловый менеджер Вот, что сейчас есть: Мне надо убрать папки и файлы, которые скрытые Вот, что проводник...

Как программно отобразить файлы и папки?
Здравствуйте! Возникла проблема. Хочу написать файловый менеджер. С файлами работать умею, а вот как отобразить файлы, папки, размер и...

Добавить в listview выбранные из папки файлы
Всем привет! Есть следующий код: Dim OFD1 As New OpenFileDialog With OFD1 .InitialDirectory =...

10
2284 / 1600 / 400
Регистрация: 26.06.2017
Сообщений: 4,743
Записей в блоге: 1
09.04.2023, 18:19
А чем классы DirectoryInfo и FileInfo не угодили?
Для каталогов можно создать группы, а файлы помещать в соответствующие группы.
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 61
09.04.2023, 20:03  [ТС]
Цитата Сообщение от Uswer Посмотреть сообщение
А чем классы DirectoryInfo и FileInfo не угодили?
Для каталогов можно создать группы, а файлы помещать в соответствующие группы.
В любом случае DirectoryInfo и FileInfo будут содержать информацию об одном файле.
И вообще я спросил как список в котором находяться папки отображать их и то что в них в ListView.
В любом случае некоторые проекты а именно те что в Projects находятся имею собственное введёное имя. И только у тех что в PathsProjects находятся имя генерируется от имени папки.

Добавлено через 6 минут
Впрочем заменить SFNPath на DirectoryInfo не сложно. Просто то что находится в PathsProjects и в Projects серелизуется в json файл. У меня большие сомнения что так просто DirectoryInfo можно будет серилизовать и десерелизховать.
Можно AllDirProjects заменить на DirectoryInfo.
0
2284 / 1600 / 400
Регистрация: 26.06.2017
Сообщений: 4,743
Записей в блоге: 1
10.04.2023, 10:24
Цитата Сообщение от Borisov_Alex Посмотреть сообщение
И вообще я спросил как список в котором находяться папки отображать их и то что в них в ListView.
И чем ответ про группы не устроил?
Добавьте в класс SFNPath свойство IsDirectory и ориентируясь по нему создавайте либо группу, либо простой Item.
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 61
10.04.2023, 13:16  [ТС]
Свойство AllDirProjects возвращает только директории объеденяя папки проектов из списка в котором находиться коллекция проектов и список просто с проектами.
Ну запихну я имена папок и файлов в ListVIEW но дальше та что. Мне же нужно по ListView открывать папку или файл.
0
2284 / 1600 / 400
Регистрация: 26.06.2017
Сообщений: 4,743
Записей в блоге: 1
10.04.2023, 15:08
Цитата Сообщение от Borisov_Alex Посмотреть сообщение
Ну запихну я имена папок и файлов в ListVIEW но дальше та что.
Запихивать надо не имена, а объекты, тогда никаких проблем не будет. Но вот беда ListView в формах не поддерживает привязку к коллекциям. Выход - пилить самому, примеры one, two.
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 61
10.04.2023, 17:56  [ТС]
Блин. Ошибся компонентом. Не ListView а TreeView - дерево. Всё что я говорил касалось именно его.

Добавлено через 22 минуты
в принципе я сделал отображение того чего хотел. Полный путь решил помещать в поле тег. Но надо сделать чтобы отображались системные иконки папок и файлов. А как это сделать без понятия.
0
2284 / 1600 / 400
Регистрация: 26.06.2017
Сообщений: 4,743
Записей в блоге: 1
10.04.2023, 21:52
Цитата Сообщение от Borisov_Alex Посмотреть сообщение
Не ListView а TreeView
Ну ё-моё! Но не смотря на это TreeView "из коробки" также не поддерживает привязку данных. Однако с ним гораздо проще. Borisov_Alex, я бы сделал так: создал класс унаследовав TreeNode; расширил класс свойством NodeInfo типа FileSystemInfo; все необходимые каталоги и файлы пихаем в одну коллекцию наших узлов; затем самое интересное и ресурсоёмкое - это построение дерева. Последнее можно сочитать с предыдущим пунктом, но надо всё взвесить. Картинки тема отдельная, их можно подставлять из своего набора, а можно пытаться вычитать системные.
Как отличать каталог от файла? Легко, надо сравнить тип в NodeInfo либо с FileInfo, либо DirectoryInfo.
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 61
10.04.2023, 22:13  [ТС]
Цитата Сообщение от Uswer Посмотреть сообщение
Ну ё-моё! Но не смотря на это TreeView "из коробки" также не поддерживает привязку данных. Однако с ним гораздо проще. Borisov_Alex, я бы сделал так: создал класс унаследовав TreeNode; расширил класс свойством NodeInfo типа FileSystemInfo; все необходимые каталоги и файлы пихаем в одну коллекцию наших узлов; затем самое интересное и ресурсоёмкое - это построение дерева. Последнее можно сочитать с предыдущим пунктом, но надо всё взвесить. Картинки тема отдельная, их можно подставлять из своего набора, а можно пытаться вычитать системные.
Как отличать каталог от файла? Легко, надо сравнить тип в NodeInfo либо с FileInfo, либо DirectoryInfo.
Я сделал путём рекурсивного поиска файлов и каталогов добавления TreeNode в TreeView указывал в качестве имени имя каталога или файла а в качестве тега полное имя файла или каталога. Но опять же мне не особо хочеться создавать новый элемент на основе TreeView в любом случае в объектах PathsProjects и Projects находиться не полные данные. Своего рода они являются ссылками на данные. Так что хранится полные данные будут либо TreeView либо в отдельном классе для меня особой роли не играет.
PathsProjects - это список исключительно списка папок в которых находяться проекты которые являются папками с данными тобишь с другими папками и файлами.
Projects в свою очередь просто если где то проект лежит отдельно а не в какомто каталоге совместно с другими проектами то он и позволяет добавлять проект отдельно.

Вот как это дело выглядит:

Мне единственное что хотелось бы чтобы отображались ренальные иконки данных. Можно накачать своих но честно нафига. Возможно же их получить из системы?
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 61
10.04.2023, 22:15  [ТС]
Ну разве что только для каталогов назначить свою иконку. 16 x 16 пикселей если я не ошибаюсь сюда войдут. Но для файлов надо вытягивать из системы.
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 61
11.04.2023, 18:30  [ТС]
В принципе решил сделать по вашему совету и создать свой TreewNode наследника оригинального:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public partial class PathTreeNode : TreeNode
    {
        private string fnPath = "";
 
        private string iconName = "";
 
        public string FnPath { get => fnPath; set => fnPath = value; }
 
        public bool IsDirectory
        {
            get => !File.Exists(fnPath) && Directory.Exists(fnPath);
        }
    }
Но также хочу прикрутить к этому TreeNode автоматическое отображение нужной иконки. Нашел способ как получить иконку из файла.
C#
1
Icon extractedIcon = System.Drawing.Icon.ExtractAssociatedIcon(@"FILE_PATH/ПУТЬ_К_ФАЙЛУ");
Но как отобразить иконку в treenode. Для папок отображать свою иконеку.

Добавлено через 1 час 40 минут
Думую создам отдельную тему так как TreeView не умеюет работать с моим TreeNode. А эту тему можно закрыть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.04.2023, 18:30
Помогаю со студенческими работами здесь

Cортировка в ListView как в проводнике (папки и файлы)
Если кто не понял, в проводнике папки никогда не перемешиваются с файлами и сортируются особняком, по дате по имени, они все держаться...

Рекурсивно отобразить файлы и папки с использованием System.IO.DirectoryInfo.GetFiles
Нужно сделать анализ данных диска в формате: D:\ -Folder A -File 1 -File 2 ... -Folder B ...

WPF Нужно отобразить файлы и папки всех дисков на компе
Нужно что то типа FileInfo DirectoryInfo DriveInfo как на WinForms только на WFP и забиндить это в DataGrid. А диски забиндить в ComboBox. ...

Отобразить в ListView подробную информацию об объекте, выбранном в другом ListView
Имеется класс Диск и класс Трек. Класс Диск содержит лист треков. На форме имеется 2 listView'а, в один listView пользователь добавляет...

Как ввести директорию папки и вывести все файлы и папки в ней?
Необходима программа, которая при вводе директории папки выводит список файлов и папок с их размерами, которые находятся в ней. Посмотрел...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru