如何在C ++中同时使用`fstream`读写文件?

时间:2019-06-19 05:12:06

标签: c++ file fstream

我试图将一些文本写入文件,然后仅使用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;),则代码将输出文件的所有文本。如何先写然后读文件?

2 个答案:

答案 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;
    }