C++ 如何编辑文件中的数据而不覆盖其他数据?

C++ 如何编辑文件中的数据而不覆盖其他数据?,c++,C++,我有一个包含以下信息的文件 123 abc 52 23 234 bcd 14 53 在我完成编辑(第一行的ID)之后,它变成这样 12345 abc 52 23 bcd 14 53 执行此操作的代码是: if (choiceSecond == 1) { cout << "Enter new ID: "; cin >> ToyInformation[choiceFirst].ID; outfile << ToyInformation[ch

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

123 abc 52 23
234 bcd 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;
}

我确信我做错了什么。有人能帮忙吗?

当您打开文件时,请使用
ios\u base::app

ofstream outfile("myfilename", ios_base::app);

这将导致所有输出都附加到文件的末尾(我猜这就是您想要的)。

当您定义
输出文件时,您可以使用stream::app的
模式,如下所示

ofstream outfile (fileName, ofstream::app);

在看不到其余代码的情况下,很难准确地说出发生了什么,但我猜您从一个包含以下内容的文件开始:

123 abc 52 23 \n234 bcd 14 53 \n
然后,我猜在读取文件后,您可以重新打开它,或者将文件指针倒带到开头,然后写入“12345 abc 52 23\n”。这些新字符覆盖文件第一部分中的现有字符,但保留其余字符不变,使文件中保留以下字符:

12345 abc 52 23 \nbcd 14 53 \n

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

您希望在不更改其余数据的情况下更改文件中的某些数据。一般的回答是不可能的。您只能将某些字节替换为其他字节,但如果您的编辑涉及插入或删除字节,则必须覆盖文件的其余部分。

我明白了,因此无法直接在文件本身中对其进行编辑。非常感谢你的帮助。
12345 abc 52 23 \nbcd 14 53 \n