Ввод и вывод файла с использованием флагов доступа к файлу и c ++

0

Допустим, я создал документ в блокноте с именем 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. Не существует последовательности. Другими словами, как именно вывод отправляется в файл. Может кто-нибудь объяснить, почему?

  • 0
    Что вы подразумеваете под «распечатка»? Я не вижу, что это что-то распечатывает.
Теги:

2 ответа

1

Когда вы открываете файл для ввода и вывода, вы должны делать seek когда вы переключаетесь между чтением и записью этого файла. Я приведу стандарт, чтобы показать, где, но набор цитат, которые вам нужно процитировать, довольно длительный (идет полным ходом до стандарта C). В основном, он говорит, что чтение и запись выполняются так, как если бы они использовали функции из библиотеки C, а в стандарте C указано, что вам нужно искать при переключении между входом и выходом потока, который открывается для обоих.

0

Я не знаю, почему 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 не работает последовательно больше, чем вам хотелось бы сделать другой способ, или я что-то неправильно понял, просто дайте мне знать, я был бы счастлив удалить этот ответ, если он действительно не помогает вы.

  • 0
    Привет Джеймс, я ценю твою помощь, но я понял это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню