#c #file-io
#c #file-io
Вопрос:
Почему tellg () перемещается после операции записи, я полагаю, это должен быть tellp ()?
std::fstream fs("c:\log.txt", std::ios::in | std::ios::out | std::ios::trunc);
fs << "write";
std::cout << fs.tellg() << std::endl;
fs.close();
Вывод:
5
Ответ №1:
Поток фактически поддерживает только один указатель, поэтому указатели чтения и записи фактически одинаковы. если вы хотите выполнять операции чтения и записи в один и тот же файл, вы должны поддерживать свой собственный указатель и выполнять поиск перед каждой операцией чтения / записи.
Комментарии:
1. Почему? Это не происходит со мной в stringstream.
2. Ах, почему? Я нахожу вопросы, которые спрашивают, почему? здесь, чтобы быть довольно бесполезным. Языки программирования являются человеческими конструкциями и на самом деле могли быть определены бесконечным числом способов. Мы придерживаемся единственного способа, выбранного разработчиками.
3. @George Что на этой странице подтверждает ваше утверждение «нет, это не так»? Мои полномочия — Langer amp; Kreft — «Двунаправленные потоки файлов … поддерживают только один индикатор положения соединения».
4. Потому что указатель get поступает из istream, а указатель put — из ostream. Итак, как они могут быть одинаковыми?
5. @parc65 Потоки файлов и памяти реализованы по-разному. Потоки памяти имеют два указателя положения, в то время как файловые потоки имеют только один.