Я попытаюсь объяснить проблему.
Оператор std::fstream* fs = new std::fstream("xx.txt");
откроет файл, если он существует в режиме по умолчанию "in | out". Если файл не существует, то вызов open из конструктора std :: fstream не будет выполнен. И это можно проверить, проверив failbit с помощью функции fail (). Таким образом, вам явно потребуется вызвать open, чтобы использовать объект fstream для ввода данных. Примечание: новый файл не будет создан, пока вы не вызовете 'close'.
Вы можете проверить это, фактически пытаясь открыть существующий файл или новый файл, в котором вы можете увидеть разницу.
ИтакВ качестве альтернативы, вы всегда должны вызывать 'open', который будет работать в обоих случаях (если файл существует или нет).
#include<iostream>
#include<fstream>
int main() {
//std::fstream fs("xx.txt");
//std::cout << fs.fail() << std::endl; // print if file open failed or passed
std::fstream fs;
fs.open("xx.txt", std::fstream::in | std::fstream::out | std::fstream::app);
std::cout << fs.fail() << std::endl;
fs << "Hello" << std::endl;
if (fs.is_open())
{
std::cout << "Operation successfully performed\n";
fs.close();
}
else
{
std::cout << "Error opening file";
}
Для чтения содержимого файла вам сначала необходимо закрыть файл. А потом снова откройте и прочитайте. Как я понимаю, когда вы начнете использовать объект fs для вставки, вы не сможете прочитать с него, если вы явно не закроете его и не откроете снова.
fs.open("xx.txt", std::fstream::in | std::fstream::out);
std::string line;
while(std::getline(fs, line)) {
std::cout << line << std::endl;
}
std::cout << "end" << std::endl;
fs.close();
}