尝试获取文件大小时,有以下块用于测试seekg和tellg的行为:
int size=0;
ifstreamin(filename.c_str (,ifstream 33603360 in|ifstream 33603360 binary );
是if(in )
{
in.seekg(0,ifstream:end;
size=in.tellg (;
cout endl;
cout endl;
cout ' * * * * * * * * size stream1* * *=' size endl;
in.seekg(0,ios:end;
size=in.tellg (;
cout ' * * * * * * * * size stream2* * *=' size endl;
in.seekg(0,ios:end;
size=in.tellg (;
cout ' * * * * * * * * size stream3* * *=' size endl;
in.seekg(100,ios:end;
size=in.tellg (;
cout ' * * * * * * * * size stream4* * *=' size endl;
in.seekg(0,ios:beg );
size=in.tellg (;
cout ' * * * * * * * * size stream5* * *=' size endl;
in.seekg(100;
in.seekg(0,ios:end;
size=in.tellg (;
cout ' * * * * * * * * size stream6* * *=' size endl;
in.seekg(100;
in.seekg(0,ios:cur;
size=in.tellg (;
cout ' * * * * * * * * size stream7* * *=' size endl;
in.seekg(-100,ios:end );
size=in.tellg (;
cout ' * * * * * * * * size stream8* * *=' size endl;
in.seekg(IOs:Beg,ios:end );
size=in.tellg (;
cout ' * * * * * * * * size stream9* * *=' size endl;
in.seekg(IOs:3360Beg;
in.seekg(IOs:3360end;
size=in.tellg (;
cout ' * * * * * * * * size stream 10 * * *=' size endl;
cout endl;
cout endl;
}
其结果如下。
*******sizestream1***=1846
*******sizestream2***=1846
*******sizestream3***=1846
*******sizestream4***=1946
*******sizestream5***=0
*******sizestream6***=1846
*******sizestream7***=100
*******sizestream8***=1746
*******sizestream9***=1846
*******sizestream10***=2
我的问题如下:
tellg会返回最后一个seekg找到的字节吗?
为什么stream5的结果是0? 以前的位置是文件的最后。
seekg是否总是从文件的开头开始,如stream5所示?
如stream5所示,seekg不能后退吗?
seekg的第一个参数是什么意思? 这表示这是第二个参数的偏移。 如果为正值,则似乎超出了第二个参数所指的位置,如stream4所示。
如果想知道前100字节之后的大小,是否需要使用-100,如stream8所示?
为什么stream10是2?
ofstream中
seekp和tellp的属性是seekg和tellg吗?