Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
45 / 19 / 5
Регистрация: 29.12.2015
Сообщений: 1,720
1
.NET 4.x

Показ список файлов из определенных папок

26.11.2017, 22:00. Показов 4860. Ответов 80
Метки нет (Все метки)

Здравствуйте. Короче идея такая. Есть некоторые виды папок
DATA
Campaigns
Downloads Maps
Multiplayer Maps
Single Maps
Battle Tutorial
Town Tutorial

Есть checkedListBox со списком этих файлов

Есть ListBox в котором нужно показать файлы из этих папок.

Весь прикол в том что эти папки необязательно должны лежать в корне и нужно также искать файлы в подпапках этих папок.

Но также известно что файлы которые нужно отобразить могут находится только в этих папках.
Как сделать так чтобы можно было управлять отображаемыми файлами в ListBox

У меня есть идея использовать под каждую папку отдельный list<string> но тогда не получится использовать BindingSource для отображения. Может у кого есть эффективный способ отображать имена файлов из папок выбранных в checkedListBox
Также еще хотелось к List перекрутить свойство возвращать от полного имени только имя файла.

И да. Узнать хочу может использовать FileInfo для этих целей так как эти файлы не только отображать нужно. В listBox их нужно будет выбирать для их дальнейшей загрузки редактирования и сохранения.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2017, 22:00
Ответы с готовыми решениями:

Распаковка определённых папок/файлов из 7z (JEDI)
Есть функция - распаковывает полностью архив, а нужно что бы только опредёлённые папки и файлы: ...

Удаление файлов и папок в сетевом обмене, кроме определенных
Доброго времени суток друзья, есть сетевая папка для обмена файлами между пользователями нашего...

Копирование нескольких определённых файлов и папок в одну определённую папку
Уважаемые форумчане мне нужен скрипт копирования папок и определенных файлов. Мне нужно...

Удалить все папки и файлы кроме определенных 2 папок и 2 файлов
Нужна помощь профессионалов ! Борюсь со скриптом bat Надо удалить все папки и файлы кроме...

80
Эксперт .NET
9428 / 6796 / 1092
Регистрация: 21.01.2016
Сообщений: 25,776
27.11.2017, 08:15 2
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
У меня есть идея использовать под каждую папку отдельный list<string> но тогда не получится использовать BindingSource для отображения.
C какого это перепугу?
0
45 / 19 / 5
Регистрация: 29.12.2015
Сообщений: 1,720
27.11.2017, 20:39  [ТС] 3
C какого это перепугу?
Ну если можно то можешь сказать как это сделать.
И еще. Есть ли споособ сделать наследника класса FileInfo
0
Эксперт .NET
9428 / 6796 / 1092
Регистрация: 21.01.2016
Сообщений: 25,776
28.11.2017, 06:35 4
Вариант №1:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System.Windows.Forms;
 
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            listBox1.DataSource = new string[3] { "File1", "File2", "File3" };;
        }
    }
}


Вариант №2:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System.Windows.Forms;
 
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            var files = new string[3] { "File1", "File2", "File3" };
 
            var bindingSource = new BindingSource(files, "");
            listBox1.DataSource = bindingSource;
        }
    }
}


Вариант №3:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System.IO;
using System.Windows.Forms;
 
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            var files = new FileInfo[3] { new FileInfo("File1"), new FileInfo("File2"), new FileInfo("File2") };
 
            listBox1.DataSource = files;
            listBox1.DisplayMember = "Name";
        }
    }
}


Вариант №4:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System.IO;
using System.Windows.Forms;
 
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            var files = new FileInfo[3] { new FileInfo("File1"), new FileInfo("File2"), new FileInfo("File2") };
 
            listBox1.DataSource = new BindingSource(files, "");
        }
    }
}


Все дают одно и тоже:
Миниатюры
Показ список файлов из определенных папок  
1
Эксперт .NET
9428 / 6796 / 1092
Регистрация: 21.01.2016
Сообщений: 25,776
28.11.2017, 06:37 5
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Есть ли споособ сделать наследника класса FileInfo
Нет. Вам уже говорили, что данный класс опечатан (sealed). С тех пор ничего не изменилось. Зачем это понадобилось?
0
45 / 19 / 5
Регистрация: 29.12.2015
Сообщений: 1,720
28.11.2017, 07:36  [ТС] 6
Я
Цитата Сообщение от Usaga Посмотреть сообщение
Все дают одно и тоже:
Ну так это я в ккрсе. Мне не то чтобы отобразить несколько файлов а еще упровлять отображением через checkedListBox
Тоесть если папка в checkedListBox выбрана то отображаем файлы этой папки.
Моя идея это для каждой папки использовать List<FileInfo>
Цитата Сообщение от Usaga Посмотреть сообщение
Нет. Вам уже говорили, что данный класс опечатан (sealed). С тех пор ничего не изменилось. Зачем это понадобилось?
К FileInfo прикрутить свойство которое бы возвращало имя файла с половиной пути. Объявлять новый ккласс и переопределять свойства FileInfo это както мнорно. Думал может есть способ не переопределять а сделать класс наследником FileInfo.
Не ну кто так делает. Нафиг его было опечатовать.
0
Эксперт .NET
9428 / 6796 / 1092
Регистрация: 21.01.2016
Сообщений: 25,776
28.11.2017, 07:49 7
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Ну так это я в ккрсе. Мне не то чтобы отобразить несколько файлов а еще упровлять отображением через checkedListBox
Тоесть если папка в checkedListBox выбрана то отображаем файлы этой папки.
Моя идея это для каждой папки использовать List<FileInfo>
Ну так меняйте содержимое BindingSource при выборе нужной папки в вашем checkedListBox. Список сразу же обновится. На то все эти BindingSource-ы и нужны. Просто подменяете коллекцию файлов.

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
К FileInfo прикрутить свойство которое бы возвращало имя файла с половиной пути. Объявлять новый ккласс и переопределять свойства FileInfo это както мнорно. Думал может есть способ не переопределять а сделать класс наследником FileInfo.
Не ну кто так делает. Нафиг его было опечатовать.
Вам уже давали совет как быть: заворачиваете свой FileInfo в другой класс (не наследуете, а включаете как поле класса) и добавляете весь нужный функционал.

Добавлено через 3 минуты

Не по теме:

Вообще, я вашей сообразительно удивляюсь (в плохом смысле слова). Вы знаете, что список можно прибиндить к контролу, но то, что этот список можно поменять и перебиндить, для вас, видимо, удивительное открытие...

0
45 / 19 / 5
Регистрация: 29.12.2015
Сообщений: 1,720
28.11.2017, 08:44  [ТС] 8
Цитата Сообщение от Usaga Посмотреть сообщение
Ну так меняйте содержимое BindingSource при выборе нужной папки в вашем checkedListBox. Список сразу же обновится. На то все эти BindingSource-ы и нужны. Просто подменяете коллекцию файлов.
Менять только через New BindingSource можно или есть другой способ.
0
Эксперт .NET
9428 / 6796 / 1092
Регистрация: 21.01.2016
Сообщений: 25,776
28.11.2017, 09:00 9
Alexandr_7, вам нужно ЛЮБЫМ способом источник данных поменять. Я вам четыре варианта уже показал. Этого мало?
0
45 / 19 / 5
Регистрация: 29.12.2015
Сообщений: 1,720
28.11.2017, 11:42  [ТС] 10
Ну как эффективнее сменить источник данных. Вот код:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Notepad_Libx
{
    public class XMLConfig
    {
        public int LocalesCount = 26;
        public string FileNameKAMRemake = "";
        public string ParseLibx = "{0}:";
 
        public DirString[] NameLibx =
            {
                new DirString (){ String = "Tutorials - Battle Tutorial", Dir = "Tutorials\\Battle Tutorial\\" },
                new DirString (){ String = "Tutorials - Town Tutorial", Dir = "Tutorials\\Town Tutorial\\" },
                new DirString (){ String = "Campaigns", Dir = "Campaigns\\" },
                new DirString (){ String = "Single Maps", Dir = "Maps\\" },
                new DirString (){ String = "Multiplayer Maps", Dir = "MapsMP\\" },
                new DirString (){ String = "Downloads Maps", Dir = "MapsDL\\" }
            };
    }
}
 
 
 
ReadXml(Application.StartupPath + "\\Config.XML");
            bsCheckedListDir.DataSource = Config.NameLibx;
            ((ListBox)checkedListDir).DataSource = bsCheckedListDir;
            ((ListBox)checkedListDir).DisplayMember = "String";
            bsCheckedListDir.ResetBindings(false);
            ListFileName = new List<NewFileInfo>[Config.NameLibx.Length];
 
for (int i = 0; i < Config.NameLibx.Length; i++)
                ListFileName[i] = FindFiles(PathKAMRemake + Config.NameLibx[i].Dir, "*.libx", SearchOption.AllDirectories);
В ListFileName и есть те файлы которые нужно отображать. Только отображать значения конкретного поля. Через
checkedListDir выбираются те индексы ListFileName которые нужно отобразить в listBox
0
Эксперт .NET
9428 / 6796 / 1092
Регистрация: 21.01.2016
Сообщений: 25,776
28.11.2017, 12:00 11

Не по теме:

Alexandr_7, имена сущностей и свойств ужасны. И вообще говнокодище адовый.



В когда пользователю выбирает нужные пункты в bsCheckedListDir, выбирайте из вашей коллекции ListFileName нужные элементы, из них составляйте единый массив всех файлов (каким-бы классом они не были представлены у вас) и пихайте в ListBox.DataSource или напрямую или через BindingSource.

Какой момент вам не понятен?
0
45 / 19 / 5
Регистрация: 29.12.2015
Сообщений: 1,720
28.11.2017, 12:54  [ТС] 12
Цитата Сообщение от Usaga Посмотреть сообщение
Alexandr_7, имена сущностей и свойств ужасны. И вообще говнокодище адовый.

Не по теме:

И чем это ужасны?

0
Usaga
28.11.2017, 12:57
  #13

Не по теме:

Alexandr_7, DirString? NewFileInfo? Имена должны быть говорящими, выражающими назначение сущности. А у вас "ПапкаСтрока", "НоваяИнформацияОФайле"... Нейм спейс Notepad_Libx вообще порадовал...

А это что вообще такое:

C#
1
((ListBox)checkedListDir).DataSource = bsCheckedListDir;

0
45 / 19 / 5
Регистрация: 29.12.2015
Сообщений: 1,720
28.11.2017, 13:23  [ТС] 14

Не по теме:

Цитата Сообщение от Usaga Посмотреть сообщение
Alexandr_7, DirString? NewFileInfo? Имена должны быть говорящими, выражающими назначение сущности. А у вас "ПапкаСтрока", "НоваяИнформацияОФайле"... Нейм спейс Notepad_Libx вообще порадовал...
А это что вообще такое:
C#
Ну Notepad Libx разве не понятно Notepad Это блокнот. Блокнот Libx файлов
DirString А как мне еще называть если это и есть папка со сстрокой тобишь 2 типа. 1 тип для строки второй тип содержит непременно папку. Тоесть тип данных который содержит саму папку и текст этой папки. Я даже на руском толком названия класса не смог придумать.
NewFileInfo ну а как еще назвать коли это пересозданный FileInfo со своими свойствами тобишь и есть новый FileInfo
На счет кода то checkedListDir.DataSource = bsCheckedListDir; не работает. И причина тому что он не находит DataSource у CheckedListBox



Добавлено через 13 минут

Не по теме:

Еще вопрос. Лень ради этого новую тему создовать да и чемто впрос глуппый. Как сделать свой тип данных на подобие тогоже string или int короче чтобы их не обязательно создавать = new тип данных.
Вроде гдето слышал что достаточно сделать класс статическим но в c# я столкнулся с проблеммой что если класс статичный то он не публичный хоть и объявлен был public возможно это баг C# проблему такую я столкнулся когда впервые 2017 VS поставил. Хотя после раз с 20 обновлений было хотя эта по прежнему VS 2017

0
Эксперт .NET
9428 / 6796 / 1092
Регистрация: 21.01.2016
Сообщений: 25,776
28.11.2017, 13:33 15
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Ну Notepad Libx разве не понятно Notepad Это блокнот. Блокнот Libx файлов
Блокнот - название конкретной программы, а не функциональная особенность. Корректнее будет "Редактов Libx файлов" - LibxEditor.

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
DirString А как мне еще называть если это и есть папка со сстрокой тобишь 2 типа. 1 тип для строки второй тип содержит непременно папку. Тоесть тип данных который содержит саму папку и текст этой папки. Я даже на руском толком названия класса не смог придумать.
Тут уместнее было бы использовать KeyValuePair<string, string> или назвать класс SourceDirectoryItem.

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
NewFileInfo ну а как еще назвать коли это пересозданный FileInfo со своими свойствами тобишь и есть новый FileInfo
Тогда уж ExtendedFileInfo. О том, что это что-то "новое" и ежу понятно.

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
На счет кода то checkedListDir.DataSource = bsCheckedListDir; не работает. И причина тому что он не находит DataSource у CheckedListBox
Это кардинально кривое решение. CheckedListBox - ваше творение? В любом случае так делать нельзя.

Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Еще вопрос. Лень ради этого новую тему создовать да и чемто впрос глуппый. Как сделать свой тип данных на подобие тогоже string или int короче чтобы их не обязательно создавать = new тип данных.
Вроде гдето слышал что достаточно сделать класс статическим но в c# я столкнулся с проблеммой что если класс статичный то он не публичный хоть и объявлен был public возможно это баг C# проблему такую я столкнулся когда впервые 2017 VS поставил. Хотя после раз с 20 обновлений было хотя эта по прежнему VS 2017
В C# всё нужно создавать с помощью оператора new. int - примитив, их ограниченное количество и добавить новый нельзя по понятным причинам. Про глюк с статичными классами - бред.
0
45 / 19 / 5
Регистрация: 29.12.2015
Сообщений: 1,720
28.11.2017, 14:21  [ТС] 16
Цитата Сообщение от Usaga Посмотреть сообщение
Это кардинально кривое решение. CheckedListBox - ваше творение? В любом случае так делать нельзя.
С какого перебегу CheckedListBox мое творение. Это стандартный компонент WindowsForms
0
Эксперт .NET
9428 / 6796 / 1092
Регистрация: 21.01.2016
Сообщений: 25,776
28.11.2017, 16:33 17
Alexandr_7, тогда с чего вы взяли, что у него нет свойства DataSource?
0
45 / 19 / 5
Регистрация: 29.12.2015
Сообщений: 1,720
28.11.2017, 17:11  [ТС] 18
Да есть. Но в помошнике он не отображается. В помошнике к написанию вот и подумал что его нету
0
Эксперт .NET
9428 / 6796 / 1092
Регистрация: 21.01.2016
Сообщений: 25,776
28.11.2017, 18:08 19
Alexandr_7, ну ёлы-палы) Всегда же можно посмотреть на объявление класса, на его методы. Прямо в студии, без обращения к документации. Плюс здравый смысл должен прийти на помощь и подсказать, что если в ListBox есть свойство DataSource, то и у наследованного от него класса CheckedListBox оно тоже быть должно. Правда ведь?)
0
45 / 19 / 5
Регистрация: 29.12.2015
Сообщений: 1,720
28.11.2017, 19:24  [ТС] 20
Цитата Сообщение от Usaga Посмотреть сообщение
В когда пользователю выбирает нужные пункты в bsCheckedListDir, выбирайте из вашей коллекции ListFileName нужные элементы, из них составляйте единый массив всех файлов (каким-бы классом они не были представлены у вас) и пихайте в ListBox.DataSource или напрямую или через BindingSource.
Какой момент вам не понятен?
Мне не понятно как прикрутить CheckedListDir к bsListFilesLibx.DataSource в зависимости от выбранных элементов добавлять нужные ListFileName
Тип ListFileName:
C#
1
2
List<ExtendedFileInfo>[] ListFileName;
ListFileName = new List<ExtendedFileInfo>[Config.NameLibx.Length];
А CheckedListDir отображает Caption у типа данных Config.NameLibx
Тобишь нужно при появлении и снятии галочки у CheckedListDir менять bsListFilesLibx.DataSource список выбранных ListFileName.
Но у DataSource нет поля Add так что использовать цикл For не выйдет
даже += к DataSource нельзя применить
А вот как применять new но не ко всем спискам массива ListFileName а к выбранным
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2017, 19:24

Удаление определённых файлов из профильных папок пользователей, имена которых заранее неизвестны
Приветствую. Настигла такая проблема. У юзверей есть на рабочих столах некоторый ярлык. И ладно бы...

Список папок и файлов
Задача: сделать вывод папок и файлов в этих папках. &lt;? $handle = opendir('.'); $i = 0;...

Список файлов и папок
Столкнулся с проблемой что данная система не выводит файлы в самой папке, то есть если в папке...

Получаем список файлов и папок
Господа, Форумчане! Хочу получить список файлов и папок допусти моей флешки (раздел G:\) вот код,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru