из файла нет.
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
string path = "./hello.txt";
string str;
fstream file;
file.open(path, fstream::in | fstream::out | fstream::app);
if (!file.is_open())
{
cout << " Ошибка в открытии файла" << endl;
}
else
{
int ch(0);
cin >> ch;
if ( ch == 1 )
{
cin >> str;
file << str << "\n";
}
if ( ch == 2 )
{
cout << " Успешно !!!" << endl;
while(!file.eof())
{
file >> str;
cout << str << endl;
}
}
}
file.close();
return 0;
}
«успешно» печатает?
Да,но while не отрабатывает. Из файла информацию не выводит. Если убрать fstream::app то печать будет,но добавлять в файл тогда не будет.
Можно открывать после чтения команды или переводить курсор в начало
У тебя файл открыт на append, он всегда в конце файла. А ты его на конец и проверяешь. Чтобы после записи начать из него читать, надо указатель чтения перевести на начало файла. Rewind называется, но методы fstream называются по другому, seek/p https://en.cppreference.com/w/cpp/io/basic_istream/seekg
Что-то я не смог найти подтверждений того, где должен быть позиция чтения при открытии с app. сppreference говорит, что при записи курсор придёт в конец, но не говорит, что должно быть прт чтении. По идее, out должен при чтении переводить позицию в начало. Но мы проверяем eof раньше, чем читаем. while ( file >> str) { … } должно работать даже без seek
Почему тогда здесь всё получается ? https://youtu.be/bTysglLJ8No
Ну я не буду туда смотреть, мне-то всё равно. Просто если ты хочешь из файла как-то читать (а файл для чтения и записи, то есть случай не тривиальный), то надо озаботиться, откуда конкретно, из какого места ты будешь читать.
Хорошо,тогда скажи пожалуйста,,чисто своё мнение. там говорится,что fstream универсальный,он и записывает/дозаписывает и читает. Так вот лучше использовать отдельные потоки для чтения и записи ifstream и ofstream или же fstream как универсальный?
Обсуждают сегодня