Получить и распечатать курсоры двоичного файла типа fstream увеличивает потоки вместе, а не независимоC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Получить и распечатать курсоры двоичного файла типа fstream увеличивает потоки вместе, а не независимо

Сообщение Anonymous »

Рассмотрим следующий код:

Код: Выделить всё

#include 
#include 

using std::fstream;

int main()
{
fstream file("text.txt", ios::out| ios::in |ios::trunc| ios::binary);
if (!file)
throw"ERROR\n";

char y = 't';

streampos get = file.tellg(); // (static_cast(get) == 0)
streampos put = file.tellp(); // (static_cast(put) == 0)

file.write(&y, sizeof(y)); // I'd assume that it will increment *only* the putting
cursor

get = file.tellg(); // Assumingly, the getting cursor will remain the same:
// (static_cast(get) == 0) . In reality: (static_cast(get) == 1)
put = file.tellp(); // Assumingly and in reality: (static_cast(put) == 1)

return 0;
}
Мне сказали, что два курсора независимы друг от друга, поэтому я не могу этого понять.
Я пытался найти ответы, но лучшее, что смог найти это: . В котором говорится:

Оба searchg и seekp имеют одинаковый эффект; использование одного из них меняет положение другого.

это:

Кстати, повторный поиск и поиск не нужны. Для смены режимов достаточно один раз установить позицию.

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

< blockquote>
Когда вы выполняете чтение после записи или наоборот, поток должен быть перемещен обратно.

Что поддерживает другой отвечает, но также отмечает:

Если операция ввода достигла конца файла, можно выполнить запись непосредственно после этого.

И это тоже не имеет смысла, потому что он говорит, что чтение сразу после конца файла - это нормально..
Все это меня смутило. Следовательно, мой вопрос: может кто-нибудь объяснить мне, как работает переменная fstream и как ее режимы влияют на функциональность потока? И тем самым объясните написанные выше ответы и сценарий.

Подробнее здесь: https://stackoverflow.com/questions/787 ... streams-to
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как мне назначить Fstream на Fstream* в C ++?
    Anonymous » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Как мне назначить Fstream на Fstream* в C ++?
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Как мне назначить Fstream на Fstream* в C ++?
    Anonymous » » в форуме C++
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Как мне назначить Fstream на Fstream* в C ++?
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Курсоры не определены на game.update (Phaser 3)
    Anonymous » » в форуме Javascript
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»