Код: Выделить всё
#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