添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

对输入流操作:seekg()与tellg()
对输出流操作:seekp()与tellp()
下面以输入流函数为例介绍用法:
seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址。
对于第一个参数,可以是正负数值,正的表示向后偏移,负的表示向前偏移。而第二个参数可以是:
ios::beg:表示输入流的开始位置
ios::cur:表示输入流的当前位置
ios::end:表示输入流的结束位置
tellg()函数不需要带参数,它返回当前定位指针的位置,也代表着输入流的大小。

假设文件test。txt为以下内容:
hello,my world
name:hehonghua
date:20090902


程序为:
#include <iostream>
#include <fstream>
#include <assert.h>

using namespace std;
int main()
{
ifstream in("test.txt");
assert(in);

in.seekg(0,ios::end);       //基地址为文件结束处,偏移地址为0,于是指针定位在文件结束处
streampos sp=in.tellg();  //sp为定位指针,因为它在文件结束处,所以也就是文件的大小
cout<<"file size:"<<endl<<sp<<endl;

in.seekg(-sp/3,ios::end);  //基地址为文件末,偏移地址为负,于是向前移动sp/3个字节
streampos sp2=in.tellg();
cout<<"from file to point:"<<endl<<sp2<<endl;

in.seekg(0,ios::beg);        //基地址为文件头,偏移量为0,于是定位在文件头
cout<<in.rdbuf();             //从头读出文件内容
in.seekg(sp2);

cout<<in.rdbuf()<<endl; //从sp2开始读出文件内容

return 0;
}


则结果输出:
file size:
45
from file to point:
30
hello,my world
name:hehonghua
date:20090902

date:20090902

tellg ()(和tellp() ) 是 C++ 文件流操作中获得流指针的函数。   所有输入/输出流对象(i/o streams objects)都有至少一个流指针:   · ifstream, 类似istream, 有一个被称为get pointer 的指针,指向下一个将被读取的   元素。   · ofstream, 类似ostream, 有一个指针put pointer ,指向 解析wav格式,发现某个文件解析错误,调试发现,打开文件时,文件偏移是0,读取4字节后,文件偏移是3588,不知道为什么。 奇怪的是换成别的文件,文件偏移就正常,代码一模一样,只是换了个wav文件名。 使用c语言写了一遍,依然一样,换成qt后,读4个字节,偏移位置就是4,正常。 那么ftell和 tellg 到底是什么意思呢? 为什么对这个特定的文件会有这样的表现? 下面以输入流函数为例介绍 用法 seekg ()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址。 对于第一个参数,可以是正负数值,正的表示向后偏移,负的表示向前偏移。而第二个参数可以是: ios ::beg:表示输入流的开始位置 ios ::cur:表示输入流的当前位置 //read whole file while(ifs.readline(str,strLen)){ std::cout &lt;&lt; line++ &lt;&lt; " : "&lt;&lt;str&lt;&lt;std::endl; ifs. seekg (0,std:... 今天在使用std::fstream操作文件时,与到一个问题seek(std:: ios ::end)与 seekg (0, std:: ios ::end)的差异。虽然查阅各种资料,然而还是无解,希望有深入理解 C++ 标准高手指点一二。         废话少说,先看如下代码 void CExceptionManager::ExceptionRecord(const std::string& text) 例如,假如我在进行文件读写,而要定位到当前位置的三个字符之前,则需调用 File Handle. seekg (-3). 但如果我是在写入一个文件,并且比如我要重写后5个字符的内容,我就必须往回跳转5个字符,因而,我应该使用 File Handle.seekp(-5) .所以当你再次调用get()函数的时候,它会返回再下一个字符,而非前面那个。nCount表示要略过的字符数量,而delimiter —— 与它的名称有着同样的含义:假如你想在文件末尾停下,则可使用EOF值传入,这样一来此函数就等同于 seekg (); 文件分为文本文件和二进制文件。文本文件是指以ASCII码方式存储的文件,英文数组存储的是ASCII码,而汉字存储的是机内码。二进制文件的内容由0,1组成,可以存储视频、图片、音频等。 tellg seekg tellg (), seekg () and seekp() functions are used to set/get the position of get and put pointers in a file while reading and writing. tellg () , seekg ()和seekp()函数用于在读取和写入时设置/获取get和put指针在文件中的...