C++ 如何编辑文件中的数据而不覆盖其他数据?
我有一个包含以下信息的文件 123 abc 52 23C++ 如何编辑文件中的数据而不覆盖其他数据?,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
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