Как написать и прочитать файл с `fstream` одновременно в c ++? - PullRequest
3 голосов
/ 19 июня 2019

Я пытаюсь записать некоторый текст в файл и затем прочитать его, используя только 1 объект fstream.

Мой вопрос очень похож на этот вопрос за исключением порядкачитай пиши.Сначала он пытается читать, а потом писать, а я сначала пытаюсь писать, а потом читать.Его код мог читать, но не писал, в то время как мой код может писать, но не читать.

Я пробовал решение из его вопроса, но он работает только для чтения.запись не запись - чтение.

Вот мой код:

#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 ]

6 голосов
/ 19 июня 2019

Это потому, что ваш объект файлового потока уже достиг конца файла после операции записи. Когда вы используете 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;

}

Хотя этот ответ не соответствует вашему требованию «одновременного чтения и записи файла», имейте в виду, что файл, скорее всего, будет заблокирован во время записи.

0 голосов
/ 19 июня 2019

Вот простой пример для записи и чтения файла. Надеюсь, это поможет вам.

  #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;
    }
...