Member 11396175 Ответов: 2

Отдельные файлы по имени файла в listbox


Здравствуйте, друзья !!!!!

У меня есть одна папка со многими txt-файлами с именем 11111111111_a,11111111111_b,22222222_a,22222222_b
Как можно разделить до 2 списков по последней цифре?

Что я уже пробовал:

private void Form1_Load(object sender, EventArgs e)
{
	textBox1.Text = Form1.GetMACAddress();
	DirectoryInfo obj = new DirectoryInfo(@"C:\");
	DirectoryInfo[] folders = obj.GetDirectories();
	comboBox1.DataSource = folders;
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
	var comboBox = (ComboBox)sender;
	var directoryInfo = comboBox.SelectedValue as DirectoryInfo;
	if (directoryInfo == null) return;
	var filenames = Directory.GetFiles(directoryInfo.FullName);
	var shortFilenames = filenames.Select(x => Path.GetFileName(x)).ToList();
	
	listBox1.DataSource = shortFilenames;
	listBox2.DataSource = shortFilenames;
}

TheRealSteveJudge

Как на самом деле выглядят имена файлов?
Разве у них нет типа файла например 11111111111_a.txt-что?

Member 11396175

у меня есть машина которая экспортирует журнал в этом формате не совсем так 111111_a.txt
но последние 2 цифры всегда _a _b _c _e и т. д.

TheRealSteveJudge

5* за то, что задали понятный вопрос!

2 Ответов

Рейтинг:
5

TheRealSteveJudge

Если ваши имена файлов такие
например: 11111111111_a.txt или 11111111111_b.txt
Линк тебе поможет.

listBox1.DataSource = shortFilenames.Where(x => Path.GetFileNameWithoutExtension(x).EndsWith("a")).ToList();
listBox2.DataSource = shortFilenames.Where(x => Path.GetFileNameWithoutExtension(x).EndsWith("b")).ToList();

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

Вы можете назвать списки, например listBoxLogA, listBoxLogB, listBoxLogC и т. д.


Member 11396175

Спасибо!!!!!!!!!!!!!

TheRealSteveJudge

Всегда пожалуйста!

Рейтинг:
19

Richard Deeming

Что-то вроде этого должно сработать:

var fileNames = directoryInfo.EnumerateFiles()
    .Select(f => f.Name)
    .ToLookup(f => Path.GetFileNameWithoutExtension(f).LastOrDefault());

listBox1.DataSource = fileNames['a'];
listBox2.DataSource = fileNames['b'];


TheRealSteveJudge

5* для общего подхода!

Member 11396175

Спасибо!!!!!!!!!!!!!