private void button3_Click(object sender, EventArgs e) { string[] Catalog; //массив путей файлов List <Song> Songs = new List <Song>(); //лист песен int CountSort = 0; //минимальное число сортируемых int InfDir = 0, InfSong = 0; //информация о сортировке string SortPath = textBox1.Text; //путь сортировки в переменную string MainPath = textBox2.Text; //основной путь в переменную listBox1.Items.Clear(); //чистка листа папок listBox2.Items.Clear(); //чистка листа песен string PathPattern = @"^\D:\.*"; //шаблон начала пути (рег. выражение: "[Символ]:\") try //отлов исключения ошибки ввода CountSort { CountSort = Convert.ToInt32(textBox3.Text); } //взятие минимального количества песен catch { MessageBox.Show("Минимальное количество сортируемых песен указано неверно!\nВведите целое число.", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); return; } try //отлов исключения ошибки директории сортировки { Catalog = Directory.GetFiles(SortPath); } //взять все файлы из каталога с путями catch { MessageBox.Show("Сортируемая папка не выбрана, или путь к ней указан неверно", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); return; } //предупреждение о возможном неправильном пути основной деректории if (!System.Text.RegularExpressions.Regex.IsMatch(MainPath, PathPattern)) { DialogResult result = MessageBox.Show( "Основной путь не сответствует стандарту представления пути. Каталоги будут созданы в неопределённом месте! Продолжить?", "Предупреждение!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); if (result == DialogResult.No) { return; } } //заполнение листа песен foreach (string S in Catalog) { Songs.Add(new Song(S)); } //групировка по исполнителю var SingerGroups = Songs.GroupBy(s => s.Singer); //проходим по группам исполнителей foreach (var Singer in SingerGroups) { //если песен у группы больше или равно минимального количества if (Singer.Count() >= CountSort) { //создаём папку, если не создана и не создаём, если есть DirectoryInfo dir = new DirectoryInfo(MainPath + '\\' + Singer.Key); if (!dir.Exists) { dir.Create(); InfDir++; //подсчёт созданых папок listBox1.Items.Add(dir.Name); //вывод созданных папок } //проходим по песням группы foreach (Song song in Singer) { //удаление файла, если он существует (для замены файлов) File.Delete(dir.FullName + '\\' + song.File); //перемещаем песни в папку File.Move(song.Full, dir.FullName + '\\' + song.File); InfSong++; //подсчёт перемещённых треков listBox2.Items.Add(song.File); //вывод перемещённых треков } } } //вывод сообщения об успехе и параметры MessageBox.Show("Сортировка выполнена!\nБыло создано " + InfDir + " каталогов.\nПеремещено " + InfSong + " треков.", "Успех!", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); }