pau*_*l23 24 c++ fstream position binaryfiles
好吧,我只是注意到通过改变位置-in microsoft visual studio-通过"seekp"我隐式地也改变了处理文件时的读取位置.
我想知道这是否是"便携式"行为?我能指望阅读和写作的位置始终如一吗?因此:将tellp&tellg总是返回相同的值?
Jes*_*ood 18
对于文件位置,它们是相同的.换句话说,只维持一个指针.
来自27.9.1.1p3:
为输入序列和输出序列保持联合文件位置.
所以,seekg和seekp用于文件流互换.但是,对于其他类型的流不是这样,因为它们可能为put和get位置保存单独的指针.
mat*_*tiu 10
更新:所以从所有评论和所有内容来看,似乎对于fstream,seekp和seekg使用相同的指针.但对于stringstream和其他非基于文件的流,它们是分开的.
原帖:
使用g ++ 4.7.2在linux上不起作用.他们似乎是独立的:
#include <sstream>
#include <iostream>
int main(int, char**) {
std::stringstream s("0123456789");
std::cout << "put pointer: " << s.tellp() << std::endl;
std::cout << "get pointer: " << s.tellg() << std::endl;
std::cout << std::endl;
s.seekp(2);
std::cout << "put pointer: " << s.tellp() << std::endl;
std::cout << "get pointer: " << s.tellg() << std::endl;
std::cout << std::endl;
s.seekg(4);
std::cout << "put pointer: " << s.tellp() << std::endl;
std::cout << "get pointer: " << s.tellg() << std::endl;
std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
put pointer: 0
get pointer: 0
put pointer: 2
get pointer: 0
put pointer: 2
get pointer: 4
Run Code Online (Sandbox Code Playgroud)
您描述的行为听起来也不符合此处的引号:
设置get指针的位置.get指针确定要在与流关联的源中读取的下一个位置.
和这里:
设置put指针的位置.put指针确定输出序列中将要进行下一个输出操作的位置.
| 归档时间: |
|
| 查看次数: |
5803 次 |
| 最近记录: |