c++ - 如何在不覆盖其他数据的情况下编辑文件中的数据?

标签 c++

我有一个包含以下信息的文件

123 abc 52 23
234 公元前 14 53

我编辑完后(第一行的ID)变成这样

12345 abc 52 23
bcd 14 53

执行此操作的代码是:

if (choiceSecond == 1)
{
    cout << "Enter new ID: ";
    cin >> ToyInformation[choiceFirst].ID;
    outfile << ToyInformation[choiceFirst].ID << " "
            << ToyInformation[choiceFirst].Name << " "
            << ToyInformation[choiceFirst].Price << " "
            << ToyInformation[choiceFirst].Quantity << " " << endl;
}

结构:

    struct toys
{
    int ID;
    char Name[31];
    float Price;
    int Quantity;
};

我确定我在这里做错了什么。谁能帮忙?

最佳答案

如果没有看到您的其余代码,很难准确判断发生了什么,但我的猜测是您从一个包含以下内容的文件开始:

123 abc 52 23 \n234 bcd 14 53 \n

然后,我的猜测是,在读取文件后,您重新打开它或将文件指针倒回开头并写入“12345 abc 52 23\n”。这些新字符会覆盖文件第一部分中的现有字符,但保留其余字符原样,在文件中保留以下内容:

12345 abc 52 23 \nbcd 14 53 \n

您可能不想覆盖下一行的第一部分。所以你需要做的是读取整个文件(可能是一个 vector 或字符串列表),在内存中更新你想要的行,然后将它们全部写回。或者,当您读取文件时,更新您想要的行,同时将它们分别写回另一个文件,并将新输出与旧输出交换。

关于c++ - 如何在不覆盖其他数据的情况下编辑文件中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20225518/

相关文章:

c++ - 带有模板参数的 Lambda 函数,而不是函数参数

c++ - 错误C2676:std::set::const_iterator没有运算符+功能?

c++ - 使用不同版本的 gcc 和 g++ 编译问题

C++ 为什么需要在扩展类中指定函数的作用域?

c++ - 替换 C++ 中的 delete,错误信息

c++ - Clang 为使用的类型别名发出 "unused type alias"警告

c++ - C++ 中的 operator<< 和 stringstream 重载

c++ - 是否有 std::once_flag 的 polyfill?

c++ - 对 vector os 字符串进行排序 c++ visual studio 2010 - 错误 C2784 无法推断模板参数

c++ - 将 for 循环与嵌套 while 循环并行化时出现 OpenMP 段错误