Раздел: Задачи / Этюды /

Как переименовать все файлы в текущем каталоге

Основы программирования

Подпишись на новости, чтобы ничего не пропустить


Задача E-02
Понадобилось мне тут переименовать довольно много файлов. Вручную это делать было лень. Да и долго. Поэтому решил написать для этого особую программку.

А теперь подробнее:

  • Есть папка с файлами. Все файлы имеют одинаковый тип (в моём случае это MP3). Имена всех файлов содержат русские буквы. Надо переименовать их таким образом, чтобы в именах не было русских букв.

Я решил реализовать две функции:

  1. Переименование с заменой русских букв латинскими. Например, а-a, б-b, в-v и так далее.
  2. Переименование с заменой русских букв цифрами. Точнее, русские буквы не заменяются цифрами, а просто имя файла заменяется номером. Например, 001, 002, 003 и т.д.

Скажу сразу, что задача эта не такая простая, особенно для новичков. Потому что все современные средства разработки используют кодировку Unicode, а при работе со строками и символами в этой кодировке есть свои особенности.

Поэтому я решил не только показать, но и предоставить для скачивания исходные коды (ссылка в конце статьи).

Для нетерпеливых сразу видео:

А для дотошных ещё немного текста…

Для упрощения я не стал заменять одну русскую букву на две латинских. Например, “я” на “ya”. Поэтому каждой русской букве у меня соответствует какой-то один символ - латинская буква или спецсимвол типа подчёркивания (_).

Вот объявленные константы для поиска и замены символов:

const
RusStr = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
EngStr = 'ABVGDEEJZIIKLMNOPRSTUFHCCSS_Y-EUAabvgdeejziiklmnoprstufhccss_y-eua';

Для поиска файлов я использовал функцию FindAllFiles, о которой здесь рассказывать не буду. Если кратко, то она создаёт список типа TStringList и загружает в него файлы указанного типа, найденные в указанном каталоге.

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

Вот исходный код основной функции:

//*******************************************************************
// Переименовывает файл
// ВХОД:  Старое имя файла
// ВЫХОД: TRUE - файл был переименован
//*******************************************************************
function CreateNewName(OldName : string) : boolean;
var i, j : WORD;
    ch   : string;
    st   : string;
begin
  Result := FALSE;
  if OldName = 'FilesRename.exe' then Exit;
  st := '';
  for i := 1 to UTF8Length(OldName) do
    begin
      ch := UTF8Copy(OldName, i, 1);
      j := UTF8Pos(ch, RusStr);
      if j = 0 then st := st + ch
      else
        begin
          st := st + UTF8Copy(EngStr, j, 1);
          Result := TRUE;
        end;
    end;
  if Result then
    begin
      RenameFile(OldName, st);
      WriteLn('Rename : ', OldName, ' >>> ', st);
    end;
end;

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

Ну и ещё одна особенность - если не указать расширение файла, отличное от ЕХЕ, то функция FindAllFiles найдёт и включит в список в том числе и файл программы (в моём случае это FilesRename.exe). Поэтому сначала я проверяю имя файла, и если оно совпадает с именем файла программы, то выхожу их функции. Иначе программа переименует саму себя.

Ну что же, на этом всё. Подробности см. в видео и в исходных кодах:

>>> Скачать исходные коды >>>


Основы C++ Основы C++

C++ - это один из самых популярных языков программирования. Не важно, на каком языке программируете лично вы. Но, если вы хотя бы в общих чертах не знаете С++, то это большой пробел в вашем образовании, который надо восполнить как можно быстрее... Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика