Esempio n. 1
0
        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);
        }