С++ После того, как я использую getline для чтения из файла, я больше не могу писать в текстовый файл

Я могу писать в текстовый файл, затем я использую getline, и я больше не могу писать в файл.

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main(){
 ifstream infile;
 fstream crypto;
 ofstream hacker;
 string tempString;
 string tempString2;
 string plaintext;
 string line;
 string dec;
.
.
.
crypto<<"hello";//write some stuff to file here
use getline(crypto, line, '\n')
crypto<<"hi";//Doesnt write to file anymore. 

person Alex    schedule 02.11.2010    source источник
comment
Я думаю, что проблема связана с попыткой одновременного чтения и записи из файла. Если это не ошибка, ошибка будет заключаться в getline и в том, как вы используете.   -  person Jim    schedule 02.11.2010


Ответы (3)


Файлы имеют один статус ошибки и общий индикатор позиции в файле, который используется как для операций чтения, так и для операций записи.

Если установлен статус ошибки, то ни чтение, ни запись файла не будут успешными. Чтение за концом файла является одним из триггеров, который вызывает установку статуса ошибки, в данном случае до тех пор, пока индикатор позиции файла не будет перемещен в пределах границ файла.

Поскольку для чтения и записи имеется только один индикатор положения, вам необходимо перемещать этот индикатор каждый раз, когда вы переключаетесь между чтением и записью одного и того же файла, чтобы убедиться, что вы выполняете следующую операцию в той позиции, в которой вы хотите ее выполнить.

person Bart van Ingen Schenau    schedule 02.11.2010

Это немного сложно увидеть из вашего кода как есть (try возвращает после каждой строки), но я думаю, вы установили доступ к файлу для чтения.

person ExpatEgghead    schedule 02.11.2010

Файл находится в состоянии ошибки.

Когда файл находится в состоянии ошибки, все операции ввода-вывода будут игнорироваться до тех пор, пока вы не сбросите состояние ошибки. Таким образом, в основном вышеизложенное предполагает, что операция getline каким-то образом не удалась.

person Martin York    schedule 02.11.2010