Допустим, я создал документ в блокноте с именем Numbers.txt. Я помещаю номер 6 в блокнот и закрываю. Затем я набираю следующий сегмент кода.
#include< iostream>
#include < fstream >
int main()
{
fstream sample;
sample.open("Numbers.txt", ios::in | ios :: out);
if(sample)
{
int number;
sample >> number;
sample << "555";
sample.close();
}
}
По какой-то причине иногда он печатает 555, а иногда просто печатает 6. Не существует последовательности. Другими словами, как именно вывод отправляется в файл. Может кто-нибудь объяснить, почему?
Когда вы открываете файл для ввода и вывода, вы должны делать seek
когда вы переключаетесь между чтением и записью этого файла. Я приведу стандарт, чтобы показать, где, но набор цитат, которые вам нужно процитировать, довольно длительный (идет полным ходом до стандарта C). В основном, он говорит, что чтение и запись выполняются так, как если бы они использовали функции из библиотеки C, а в стандарте C указано, что вам нужно искать при переключении между входом и выходом потока, который открывается для обоих.
Я не знаю, почему fstream несовместим для вас, но если вы отделяете поток входных файлов от потока выходных файлов, он работает последовательно для меня;
main.cpp
std::ifstream inputFileStream("sample.txt");
std::ofstream outputFileStream("sample.txt",std::ios_base::app); // append to file
if(inputFileStream.good() && outputFileStream.good()){
int number;
inputFileStream >> number;
outputFileStream << "555";
inputFileStream.close();
outputFileStream.close();
}
sample.txt имеет в нем символ "6".
Вот как это выглядит;
c:\Users\James\Desktop>type sample.txt
6
c:\Users\James\Desktop>main
c:\Users\James\Desktop>type sample.txt
6555
c:\Users\James\Desktop>main
c:\Users\James\Desktop>type sample.txt
6555555
c:\Users\James\Desktop>main
c:\Users\James\Desktop>type sample.txt
6555555555
Если вы на самом деле не хотите добавлять, удаляя этот флаг, вывод файла для меня каждый раз без добавления - это единственный сингл "555", который по-прежнему остается неизменным;
c:\Users\James\Desktop>type sample.txt
6
c:\Users\James\Desktop>main
c:\Users\James\Desktop>type sample.txt
555
c:\Users\James\Desktop>main
c:\Users\James\Desktop>type sample.txt
555
c:\Users\James\Desktop>main
c:\Users\James\Desktop>type sample.txt
555
Если вы хотите знать, почему ваше использование fstream не работает последовательно больше, чем вам хотелось бы сделать другой способ, или я что-то неправильно понял, просто дайте мне знать, я был бы счастлив удалить этот ответ, если он действительно не помогает вы.