C# Как переименовать файл?

C# Как переименовать файл?

В этой заметке будет показано, как можно получить и изменить имена и расширения всех файлов в выбранной вами папке.

Дано:

файлы

Задача:

Переименовать все файлы в текущей директории.

Решение:

Для начала создадим обычное Windows Forms приложение, после чего на форму поместим одну кнопку и один control folderBrowserDialog, который переименуем в fbd.

folderBrowserDialog

Поместите код в обработчик события Button.Click

private void button1_Click(object sender, EventArgs e)
{
//с помощью диалога выбираем папку с файлами
DialogResult result = fbd.ShowDialog();
if (result == DialogResult.OK)
{
//Получить все файлы в папке
string [] files = Directory.GetFiles(fbd.SelectedPath);
int ind = 0;
for (int i=0; i < files.Length; i++)
{
//поиск индекса последнего слеша
ind = files[i].LastIndexOf('\\');
//переименование
File.Move(files[i], files[i].Remove(ind + 1) + i +".txt");
}
MessageBox.Show("Готово!");
}
}

Результат:

переименованные файлы

Основные моменты:

Добавьте строку:

using System.IO;

1. Получаем все файлы в выбранной директории и загоняем их в массив.

Содержимое массива files:

files[0] = C:\ff\Текстовый документ.txt
files[1] = C:\ff\Текстовый документ(2).txt

Как видно в массиве храниться полный путь к каждому файлу.

2. Переименование файла будет осуществляться при помощи метода Move, в который передается два параметра: полный путь к файлу, который нужно перенести или переименовать и новый путь + новое имя файла, либо текущий путь + новое имя файла.

Так как в этом примере файл перемещать не требуется, то изменим лишь только имя файла.

File.Move(@"C:\ff\Текстовый документ.txt", @"C:\ff\0.txt");

3. Первый параметр у нас уже есть, он хранится в массиве files, осталось получить второй параметр.

Для начала нужно удалить старое имя файла

C:\ff\ - путь   Текстовый документ - имя файла  .txt - расширение 

Воспользуемся методом LastIndexOf(), который в строке

C:\ff\Текстовый документ.txt

найдет индекс последнего слеша после чего, используя метод Remove, удалим всё, что идёт после него.

C:\ff\Текстовый документ.txt -> C:\ff\

После чего добавляем новое имя файла и расширение.

Читайте также:

17 комментариев

  1. Алексей says:

    Элемент &#171;Directory&#187; не существует в текущем контексте.
    Элемент &#171;File&#187; не существует в текущем контексте.

  2. using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    using System.IO; //добавить!

  3. Алексей says:

    Спасибо, помогло!

  4. Алексей says:

    А если мне надо переименовывать файлы не с 0 а например с 3?

  5. Изменить цикл for. Так как индекс первого элемента (файла) равен нуля, то, чтобы начать с 3 файла нужно указать 2.

    for(int i = 2; i < files.Length; i++)
    {
    }
  6. Алексей says:

    2 файла оставляет не изменными

  7. Всё правильно, ведь он начинает переименовывать с 3 файла, а 1 и 2 пропускает. &#171;А если мне надо переименовывать файлы не с 0 а например с 3?&#187; Может быть задача не правильно сформулирована?

  8. Алексей says:

    мне надо чтобы нумерация файлов была с 3-ей цифры, а не с 3-го файла!

  9. int k = 3;
    
    int ind = 0;
    for (int i = 0; i <  files.Length; i++)
    {
    ind = files[i].LastIndexOf('\');
    File.Move(files[i], files[i].Remove(ind + 1) + k + ".txt");
    ++k;
    }

    //Результат: 3.txt, 4.txt, 5.txt, 6.txt и т.д.

  10. Алексей says:

    Спасибо большое, только объясните этот код!

  11. Добавлена переменная k и операция инкремента. Всё объяснение приведено в статье.

  12. Один вопрос.
    Если нам нужно переименовать множество файлов так, что бы старое название сохранилось, и перед старым названием надо добавить нумерацию. К примеру: есть файлы &#171;Example.txt&#187;, &#171;Video.txt&#187;, &#171;Games.txt&#187;, и нам нужно сделать &#171;1_Example.txt&#187;, &#171;2_Video.txt&#187;, &#171;3_Games.txt&#187;. Если так вообще возможно&#8230;

  13. string [] files = Directory.GetFiles(@"c:txt");
    int ind = 0;
    for (int i = 0; i < files.Length; i++)
    {
    ind = files[i].LastIndexOf('\');
    File.Move(files[i], files[i].Insert(ind + 1, i + "_"));
    }
  14. Спасибо большое!

  15. Возник новый вопрос, точнее даже проблема. Я внес все нужные мне файлы .txt в одну папку и путь этой папки &#8216;D:TEST.txt&#8217;. Но при компиляции в этой строке &#171;string [] files = Directory.GetFiles(@&#187;D:TEST.txt&#187;);&#187; выдает ошибку &#171;An unhandled exception of type &#8216;System.IO.DirectoryNotFoundException&#8217; occurred in mscorlib.dll, Could not find a part of the path &#8216;D:TEST.txt&#8217;.&#187; Путь указан верно, и файлы там присутствуют.

  16. Возник еще один вопрос. Я поместил все нужные мне txt файлы в папку &#171;TEST&#187; и указал путь в программе но мне в строке &#171;string[] files = Directory.GetFiles(@&#187;c:TEST.txt&#187;);&#187; выдает &#171;DirectoryNotFoundException&#187; а именно Could not find a part of the path &#8216;c:TEST.txt&#8217;

  17. c:TEST.txt &#8212; путь неверный. Нужно просто указать имя диска и имя папки (c:TEST)

    Если в папке содержатся файлы с другим расширением, а нужно выбрать только файлы .txt, то тогда можно сделать так:

    //получить все файлы только с расширением .txt
    string[] files = Directory.GetFiles(@"c:txt", "*.txt");

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*