【问题标题】:How do I use std::rename with variables?如何将 std::rename 与变量一起使用?
【发布时间】:2022-01-12 16:19:52
【问题描述】:

在我的程序中,我将数据存储在不同的文本文件中。数据属于一个对象,我称之为火箭。例如,火箭土星 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");      
}

这将返回错误“[cquery] 数组初始值设定项必须是初始值设定项列表或字符串文字”。 如何使用 std::rename 或任何其他文件重命名功能,允许我重命名我想要的任何文件而不用硬编码它们?

【问题讨论】:

  • 使用std::string,然后使用字符串连接将各个部分组合在一起。

标签: c++ file rename file-rename cstdio


【解决方案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) {

附:我建议改用std::filesystem::rename,因为我认为它有更好的错误处理方式。

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多