Число файлов в каталоге в 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;
List old_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 и отображением успешного сообщения.
