如何将 std::rename 与变量一起使用?
How do I use std::rename with variables?
在我的程序中,我将数据存储在不同的文本文件中。数据属于一个对象,我称之为火箭。例如,土星 5 号火箭有一个标记为“Saturn5R.txt”的文本文件。我想要一个重命名火箭的选项,所以我也需要重命名文本文件。我在图书馆使用 std::rename。我已经让它与这样的东西一起工作:
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");
}
此 returns 错误“[cquery] 数组初始值设定项必须是初始值设定项列表或字符串文字”。
我如何使用 std::rename 或任何其他文件重命名功能,让我可以重命名我想要的任何文件而无需硬编码?
这与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
,因为在我看来它有更好的处理错误的方法。
在我的程序中,我将数据存储在不同的文本文件中。数据属于一个对象,我称之为火箭。例如,土星 5 号火箭有一个标记为“Saturn5R.txt”的文本文件。我想要一个重命名火箭的选项,所以我也需要重命名文本文件。我在图书馆使用 std::rename。我已经让它与这样的东西一起工作:
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");
}
此 returns 错误“[cquery] 数组初始值设定项必须是初始值设定项列表或字符串文字”。 我如何使用 std::rename 或任何其他文件重命名功能,让我可以重命名我想要的任何文件而无需硬编码?
这与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
,因为在我看来它有更好的处理错误的方法。