对输入流操作: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 << line++ << " : "<<str<<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指针在文件中的...