#c #file #rename #file-rename #cstdio
#c #файл #переименовать #файл-переименовать #cstdio
Вопрос:
В моей программе я храню данные в разных текстовых файлах. Данные принадлежат объекту, который я называю ракетами. Например, у ракеты Saturn 5 есть текстовый файл с надписью «Saturn5R.txt». Мне нужна возможность переименовать ракету, и поэтому мне также нужно будет переименовать текстовый файл. Я использую std::переименование в библиотеке. Я заставил его работать с чем-то вроде этого:
char oldname[] = "Saturn5R.txt"; char newname[] = "Saturn6R.txt"; if (std::rename(oldname, newname) != 0) { perror("Error renaming file"); }
Это работает, но я не хочу всегда переименовывать Saturn5R.txt чтобы Saturn6R.txt. Что я хочу сделать, так это иметь возможность переименовать любой текстовый файл на любое имя, я попробовал это сделать и получил сообщение об ошибке:
char oldname[] = rocketName RocketNumber "R.txt"; char newname[] = NameChoice NumberChoice "R.txt"; if (std::rename(oldname, newname) != 0) { perror("Error renaming file"); }
Это возвращает ошибку «инициализатор массива[cquery] должен быть списком инициализаторов или строковым литералом». Как я могу использовать std::переименование или любую другую функцию переименования файлов, которая позволяет мне переименовывать любые файлы, которые я хочу, без их жесткого кодирования?
Комментарии:
1. используйте
std::string
и, а затем используйте объединение строк, чтобы объединить части вместе.
Ответ №1:
Это имеет мало общего с std::rename
тем , как интерполировать переменные в строку, и все это связано с тем, как интерполировать переменные в строку. Простое решение состоит в том, чтобы использовать std::string
. Он имеет перегруженный оператор , который можно использовать для объединения подстрок.
Если вы хотите сделать программу немного более модной, добавлен C 20 std::format
:
std::string oldname = std::format("{}{}R.txt", rocketName, RocketNumber); std::string newname = std::format("{}{}R.txt", NameChoice, NumberChoice); if (std::rename(oldname.c_str(), newname.c_str()) != 0) {
P.S. Я рекомендую использовать std::filesystem::rename
вместо этого, так как, на мой взгляд, у него есть лучшие способы обработки ошибок.