Есть ли способ изменить имена текстовых файлов в папке с помощью С++

Я работаю с кучей текстовых файлов (тысячи) в своем проекте. Каждый текстовый файл содержит информацию в формате «csv». Проблема в том, что каждый текстовый файл имеет случайное имя, и я не могу из-за этого создать код для их загрузки в свой проект. Итак, я хочу переименовать их по определенному шаблону, чтобы упростить загрузку файлов в моей работе. Я буду использовать C++ для выполнения этой задачи.

Я помещаю все файлы txt в папку, но не вижу способа переименовать их с помощью С++. Как я могу это сделать? есть ли способ сделать это? Кто-нибудь может мне помочь?


person JulioArita    schedule 09.12.2020    source источник
comment
Я не уверен, что C++ является наиболее подходящим инструментом для этой задачи? Есть ли особая причина, по которой вы должны его использовать? Почему не bash-скрипт?   -  person Arnaud Becheler    schedule 09.12.2020
comment
Я пытаюсь использовать C ++, потому что это язык, который я знаю умеренно, но если есть другой вариант, например, использование Python, я готов попробовать его. Сценарий bash может быть хорошим вариантом, но я не знаю, как это сделать. Не подскажете, пожалуйста, как?   -  person JulioArita    schedule 09.12.2020
comment
хорошо, я разместил ответ на ваш вопрос. Я не думаю, что C++ - самый простой способ сделать это. Вероятно, вам следует отредактировать свой вопрос, чтобы сообщество могло найти самое простое решение вашей проблемы :) Удачи!   -  person Arnaud Becheler    schedule 09.12.2020


Ответы (2)


Вы можете использовать std::filesystem::directory_iterator и std::filesystem::rename (c++17), как описано здесь.

person Kostas    schedule 09.12.2020
comment
Я не знал этих функций, спасибо! Думаю, мне все еще нужно пройти весь C++ 17 ^^ Мне нравится идея directory_iterator :D - person Arnaud Becheler; 09.12.2020

Отказ от ответственности

Достоверность этого ответа основана на комментарии, в котором автор указал, что они не привязаны к языку C++ (возможно, стоит отредактировать вопрос, тег C++ и ОС). Это решение может работать для систем UNIX, поддерживающих bash, то есть для большинства дистрибутивов Linux и всех выпусков macOS от Apple до macOS Catalina (поправьте меня, если я ошибаюсь).

Командная строка Баш

Использование следующей команды bash должно переименовывать все файлы в папке с возрастающими номерами, то есть:

  • toto.csv -> 1.csv
  • titi.csv -> 2.csv и т. д.

Предполагается, что порядок не важен.

a=1; for i in *; do mv -n "$i" "$a.csv" ; let "a +=1"; done

Чтобы проверить это, вы можете подготовить тестовую папку, открыв терминал и набрав:

mkdir test
cd test
touch toto.csv titi.csv tata.csv
ls

Вывод:

tata.csv  titi.csv  toto.csv

Затем вы можете запустить следующую команду:

a=1; for i in *; do mv -n "$i" "$a.csv" ; let "a +=1"; done
ls

Вывод:

1.csv  2.csv  3.csv

Объяснение:

  • a=1 объявить переменную
  • for i in *; начинаем перебирать все файлы в папке
  • do mv переместит (переименует) файл списка (то есть переменную $i) на новое имя с именем a.csv
  • и мы увеличиваем счетчик a и закрываем цикл.
  • опция -n гарантирует, что ни один файл не будет перезаписан командой mv

Я предположил, что не было определенного критерия для переименования файлов. Если в переименовании есть определенная структура (шаблон), команда bash, вероятно, может ее учесть, но тогда вопрос должен содержать более подробную информацию об этих требованиях :)

person Arnaud Becheler    schedule 09.12.2020