我试图将一些文本写入文件,然后仅使用1个fstream对象读取它。
除了读/写的顺序外,我的问题与this question非常相似。他正在尝试先阅读然后写作,而我正在尝试先写作然后阅读。他的代码可以读取但不能编写,而我的代码可以写入但不能读取。
我已经从他的问题中尝试过the solution,但它仅适用于读写,而不适用于读写。
这是我的代码:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream fileObj("file.txt", ios::out|ios::in|ios::app);
// write
fileObj << "some text" << endl;
// read
string line;
while (getline(fileObj, line))
cout << line << endl;
}
代码成功地将some text
写入file.txt
,但没有从文件中输出任何文本。但是,如果我不向文件中写入文本(删除fileObj << "some text" << endl;
),则代码将输出文件的所有文本。如何先写然后读文件?
答案 0 :(得分:6)
这是因为在写操作之后,您的文件流对象已经到达文件的末尾。当您使用getline(fileObj, line)
来读取一行时,您位于文件的末尾,因此您什么也不会读取。
在开始读取文件之前,可以使用fileObj.seekg(0, ios::beg)
将文件流对象移动到文件的开头,并且读取操作将正常进行。
int main()
{
fstream fileObj("file.txt", ios::out | ios::in | ios::app);
// write
fileObj << "some text" << endl;
// Move stream object to beginning of the file
fileObj.seekg(0, ios::beg);
// read
string line;
while (getline(fileObj, line))
cout << line << endl;
}
尽管此答案不符合您“同时读取和写入文件”的要求,但请记住,文件最有可能在写入时被锁定。
答案 1 :(得分:0)
这里是编写和读取文件的简单示例。 希望对您有帮助。
#include<fstream>
using namespace std;
int main ()
{
ofstream fout ("text.txt"); //write
ifstream fin ("text.txt"); // read
fout<<"some text";
string line;
while (fin>> line) {
cout<<line;
}
return 0;
}