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

Источник: http://csharphelper.com/blog/2015/11/number-files-in-a-directory-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector