我创建了一个代码,在.txt文件中编写内容并从中读取。但是如果我关闭程序并再次开始写入,它会删除旧文本并用新文本覆盖它。
有没有办法不覆盖现有数据?
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void check() {
string text;
ifstream file;
file.open("test.txt");
getline(file, text);
if (text == "") {
cout << "There's no data in file" << endl;
} else {
cout << "File contains:" << endl;
cout << text << endl;
}
}
int main() {
check();
string text;
ofstream file;
file.open("test.txt");
cout << "Type some text" << endl;
getline(cin, text);
file << text;
return 0;
}
答案 0 :(得分:2)
您需要在“追加”模式下打开文件,如下例所示
#include <fstream>
int main() {
std::ofstream outfile;
outfile.open("yourfile.txt", std::ios_base::app);//std::ios_base::app
outfile << "your data";
return 0;
}
您可以在此处阅读有关fstream标志的文件http://www.cplusplus.com/reference/fstream/fstream/open/
答案 1 :(得分:1)
请记住,在c ++中,有多种方法可以在文件中打开,保存和读取文本数据。听起来你打开了一个函数(及其选项)来始终创建一个新文件。您可以做的一件事是运行程序然后关闭程序并使用文本编辑器打开文件以验证您写入文件的文本是否确实存在。另请查看Evyatar提供的代码。该示例使用ofstream,它允许读取,写入和追加选项。 &#34; app&#34;参数告诉程序保留文件中已有的内容并附加在下次运行中添加的任何新数据。在测试你要附加的文件时,要小心你不要得到一个你不想拥有的大文件。
答案 2 :(得分:0)
请插入下次代码。如果以写入模式打开文件,则每次写入文件时都是正常的,文件内容会发生变化。您需要使用追加模式。
答案 3 :(得分:0)
在修订后的问题中发布的代码中,请务必关闭检查功能和程序末尾的文件。如果你不这样做,就有可能把事情搞砸。作为预防措施,我通常会在打开文件之前将文件关闭,以确保文件没有问题。这种做法来自我在BASIC编程的日子,这是必不可少的。如果程序崩溃,则在关闭程序之前无法再次打开它。当然,在完成文件之后和程序结束之前关闭文件。然后,当您在main中打开它时,使用append选项打开它。