Число файлов в каталоге в C#
Недавно я отправился в путешествие, где взял почти тысячу картин. Мой телефон (который имеет довольно хорошую камеру) дает имена файлов изображений, такие как WP_20151106_22_04_47_Pro.jpg. Я хотел легко найти файлы, чтобы иметь более значимые имена, такие как HimejiCastle01.jpg или Food007.jpg.
В этом примере вы можете выбрать каталог, а затем изменить имена из файлов в нем, чтобы они включали базовое имя (например, «Замок Химедзи») и все большее число.
Введите или выберите имя каталога. Затем введите базовое имя и начальный номер. Когда вы нажимаете «Список», программа перечисляет файлы в каталоге и показывает имена, которые она им даёт. Если вам нравятся результаты, нажмите «Переименовать», чтобы переименовать файлы.
Следующий код выполняется при нажатии кнопки «Список».
private void btnList_Click(object sender, EventArgs e) { lvwFiles.Items.Clear(); string[] filenames = Directory.GetFiles(txtDirectory.Text); if (filenames.Length == 0) return; Array.Sort(filenames); int index = int.Parse(txtStartAt.Text); string format = "{0:D" + txtStartAt.Text.Length.ToString() + "}"; string base_name = txtBaseName.Text; Listold_names = new List (); foreach (string filename in filenames) { string old_name = Path.GetFileName(filename); old_names.Add(old_name); ListViewItem item = lvwFiles.Items.Add(old_name); string new_name = base_name + string.Format(format, index) + Path.GetExtension(filename); if (old_names.Contains(new_name)) { MessageBox.Show("Name " + new_name + " is already in use."); break; } item.SubItems.Add(new_name); index++; } lvwFiles.Columns[0].AutoResize( ColumnHeaderAutoResizeStyle.ColumnContent); lvwFiles.Columns[1].AutoResize( ColumnHeaderAutoResizeStyle.ColumnContent); btnRename.Enabled = true; }
Этот код использует Directory.GetFiles для получения массива файлов в каталоге. Затем он использует Array.Sort для сортировки имен файлов.
Далее код анализирует текст, введенный в текстовое поле Start At. Он форматирует строку для форматирования чисел с длиной текста в этом текстовом поле. Например, если вы введете 000, строка формата будет {0: D3}. Когда он позже использует эту строку для форматирования чисел, результаты имеют длину 3 цифры.
Затем код перебирает имена файлов. Для каждого имени он получает текущее имя файла без пути к каталогу и добавляет его в ListView. Затем он создает новое имя файла. Если новое имя уже находится в списке текущих имен, программа жалуется, потому что не может переименовать файл, чтобы иметь новое имя. (Это может произойти в зависимости от порядка переименования файлов, но программа просто предполагает, что он не будет работать.) Если имя в порядке, программа добавляет его во второй столбец ListView. р>
Наконец, код изменяет размер столбцов ListView, чтобы они были достаточно большими, чтобы отображать их данные.
При нажатии кнопки «Переименовать» выполняется следующий код.
private void btnRename_Click(object sender, EventArgs e) { string dirname = txtDirectory.Text; foreach (ListViewItem item in lvwFiles.Items) { string old_name = Path.Combine(dirname, item.Text); string new_name = Path.Combine(dirname, item.SubItems[1].Text); File.Move(old_name, new_name); } int num_files = lvwFiles.Items.Count; lvwFiles.Items.Clear(); btnRename.Enabled = false; MessageBox.Show("Renamed " + num_files.ToString() + " files."); }
Этот код получает имя каталога и затем циклически перемещается по элементам в элементе управления ListView. Он объединяет путь к каталогу с текущими и новыми именами файлов в ListView, а затем использует File.Move для переименования файлов. Код завершается очисткой ListBox и отображением успешного сообщения.