首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

文件处理中的tellg()和tellp()函数显示出意外行为

tellg()和tellp()是C++中用于文件处理的函数,它们分别用于获取输入流和输出流的当前位置。

tellg()函数用于获取输入流的当前位置,返回一个类型为streampos的值,表示当前位置相对于文件开头的偏移量。tellp()函数用于获取输出流的当前位置,也返回一个类型为streampos的值。

然而,在某些情况下,tellg()和tellp()函数可能会显示出意外行为。这可能是由于以下原因之一:

  1. 文件未正确打开:在使用tellg()和tellp()函数之前,必须确保文件已经正确打开。如果文件未正确打开,这些函数将无法正常工作。
  2. 文件模式不匹配:tellg()和tellp()函数只能在以读取模式打开的文件上使用tellg()函数,在以写入模式打开的文件上使用tellp()函数。如果尝试在错误的文件模式下使用这些函数,将会导致意外行为。
  3. 文件指针位置错误:如果在使用tellg()和tellp()函数之前,文件指针已经被移动到了文件末尾或其他位置,那么这些函数返回的值可能不准确。

为了避免tellg()和tellp()函数的意外行为,可以按照以下步骤进行操作:

  1. 确保文件已正确打开,并且以正确的模式打开。
  2. 在使用tellg()和tellp()函数之前,确保文件指针位于正确的位置。可以使用seekg()和seekp()函数来移动文件指针到所需位置。
  3. 在使用tellg()和tellp()函数之后,可以使用clear()函数来清除任何错误标志,以确保后续的文件操作不受影响。

总结起来,tellg()和tellp()函数是用于获取输入流和输出流的当前位置的函数。然而,在使用这些函数时,需要注意文件的打开方式、文件指针的位置以及错误标志的处理,以避免意外行为的发生。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(Mobile):https://cloud.tencent.com/product/mobile
  • 腾讯云区块链(Blockchain):https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

文件IO操作之文件指针

fail方法用于判断最后一次读取数据时候是否遇到了类型不配情况,若是返回true(如果遇到了EOF,该方法也返回true) bad如果出现意外问题 任意文件受损或硬件故障 最后依次读取数据时候发生了这样问题...我们之前在C++语言中也提到了文件指针这个概念 这里再来复习一下可以说是 文件指针可以理解为文件内部记录读取或者写入的当前位置 每次程序在读写文件时,磁盘文件指针就会向后移动一个字节 文件流提供以下成员函数来读取或配置文件指针...标志 ios::beg 表示偏移量是从文件开头算起。也可以修改该参数,从文件末尾或文件的当前位置计算偏移量。表 1 列出了所有 3 种随机访问模式标志。...运行截图 tellp会返回当前写入文件指针位置 也就是24 写文件写入的话会从24位置继续写入 我们现在设置一下写入文件文件指针 通过seekp成员函数 可以看到我们将写入文件指针设置为...0 则下一次写入文件操作将会从文件0位置开始写入 可以看到 我们将标志改到尾部 然后设置偏移量为0 表示从尾部加入 现在我们开始读文件 我们发现在使用>>进行读文件时 遇到空格回车会自动停止读取

26430

vs没有vc_vs控件

可以使用以下成员函数来读取或配置流指针: tellg()tellp() 这两个函数不用传入参数,返回pos_type类型值,即一个整数,代表当前get流指针位置(用tellg)或put流指针位置...要求传入参数类型与函数 tellg tellp 返回值类型相同。...由于这个原因,建议对以文本文件模式打开文件总是使用seekg seekp第一种原型,而且不要对tellgtellp 返回值进行修改。...对二进制文件,你可以任意使用这些函数,应该不会有任何意外行为产生。...\n”; return 0; } //`获取二进制文件大小 4.二进制文件 在二进制文件,使用>,以及函数(如getline)来操作符输入输出数据,没有什么实际意义,虽然它们是符合语法

75020
  • C++ IO库介绍及使用方式

    指向流读写位置流指针 我们还可以通过使用以下成员函数来读出或配置这些指向流读写位置流指针: tellg() tellp() 这两个成员函数不用传入参数,返回pos_type 类型值(根据ANSI-C...代表当前get 流指针位置 (用tellg) 或 put 流指针位置(用tellp). seekg() seekp()这对函数分别用来改变流指针get put位置。...要求传入参数类型与函数 tellg tellp 返回值类型相同。...由于这个原因,建议对以文本文件模式打开文件总是使用seekg seekp第一种原型,而且不要对tellgtellp 返回值进行修改。...对二进制文件,你可以任意使用这些函数,应该不会有任何意外行为产生。 string 流这里不做介绍了,如果感兴趣可以自行学习,可参考 《C++ primer》 以上内容参考 《C++ primer》

    1.9K20

    C++文件读写

    fstream使用 在fstream类,成员函数open()实现打开文件操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件读写操作,同时在打开文件时...为了能够更为方便地对文件进行操作,还需要能够判断我们读文件读到了哪里,使用函数tellg/tellp 用于提取当前文件指针位置,使用函数 seekg/seekp 来将文件指针移到某处 tellg()... tellp() 这两个成员函数不用传入参数,返回pos_type 类型值(根据ANSI-C++ 标准) ,就是一个整数,代表当前get 流指针位置 (用tellg) 或 put 流指针位置...seekg() seekp() 这对函数分别用来改变流指针get put位置。...要求传入参数类型与函数 tellg tellp 返回值类型相同。

    1.1K30

    从零开始学C++之IO流类库(三):文件读写、二进制文件读写、文件随机读写

    二进制文件不同于文本文件,它可用于任何类型文件(包括文本文件) 对二进制文件读写可采用从istream类继承下来成员函数read()从ostream类继承下来成员函数write() 文件打开操作时使用枚举常量...,最有价值应用可以处理结构体变量类对象 函数原型: ostream& write( const char* pch, int nCount ); 函数参数: pch 写入数据指针 nCount...{beg, cur, end}; 每个枚举常量含义: ios::beg:文件起始位置 ios::cur:文件流的当前位置 ios::end:文件结束位置 tellp tellg...类似C库ftell,,linux 系统调用lseek(fd, 0, SEEK_CUR); 函数功能 tellp:获得输出文件流指针的当前位置,以字节为单位 tellg:获得输入文件流指针的当前位置...,以字节为单位 函数原型: streampos tellp(); streampos tellg(); 函数返回值:实际上是一个long类型 #include  #

    3.1K10

    seekg()与tellg()用法详解

    对输入流操作:seekg()与tellg() 对输出流操作:seekp()与tellp() 下面以输入流函数为例介绍用法: seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址...对于第一个参数,可以是正负数值,正表示向后偏移,负表示向前偏移。...而第二个参数可以是: ios::beg:表示输入流开始位置 ios::cur:表示输入流的当前位置 ios::end:表示输入流结束位置 tellg()函数不需要带参数,它返回当前定位指针位置,也代表着输入流大小...,偏移地址为0,于是指针定位在文件结束处 streampos sp=in.tellg(); //sp为定位指针,因为它在文件结束处,所以也就是文件大小 cout<<"file size...in.tellg(); cout<<"from file to point:"<<endl<<sp2<<endl; in.seekg(0,ios::beg); //基地址为文件

    64920

    C++标准输入输出流_seekg函数详解

    文件输入输出流操作函数主要有 1/seekg()tellg() //对输入流操作(也就是读) 2/seekp()tellp() //对输出流操作(也就是写) 1.seekg()是对输入文件定位...对于第一个参数,可以是正负数值,正表示向后偏移,负表示向前偏移。...而第二个参数可以是: ios::beg:表示输入流开始位置 ios::cur:表示输入流的当前位置 ios::end:表示输入流结束位置 2.tellg()函数不需要带参数...,它返回当前定位指针位置,也代表着输入流大小。...同理,第二组两个函数也是类似的用法,只不过是应用于输出流操作; 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141968.html原文链接:https:/

    92320

    C++ fstream详解

    大家好,又见面了,我是你们朋友全栈君。 C语言里面对文件操作是通过文件指针,以及一些相关函数,那么C++是如何对文件进行操作呢?没错,就是通过 fstream 这个文件流来实现。...C语言文件操作 函数 fopen()将一个文件一个流关联起来,并初始化一个类型为 FILE 对象,该对象包含了控制该流所有信息。...一旦打开了文件,就可以调用函数传递数据并对流进行处理。这些函数都把指向 FILE 对象指针(通常称为 FILE 指针)作为它们参数之一。...()以外,还有一些验证流状态成员函数(所有都返回bool型返回值): is_open():文件是否正常打开 bad():读写过程是否出错(操作对象没有打开,写入设备没有空间) fail():读写过程是否出错...fstream put_pointget_point - 获取流指针位置 tellg(): 返回输入流指针位置(返回类型long) tellp(): 返回输出流指针位置(返回类型long) -

    1.8K41

    seekg()seekp()与tellg()tellp()用法详解

    对输入流操作:seekg()与tellg() 对输出流操作:seekp()与tellp() 下面以输入流函数为例介绍用法: seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址...而第二个参数可以是: ios::beg:表示输入流开始位置 ios::cur:表示输入流的当前位置 ios::end:表示输入流结束位置 tellg()函数不需要带参数,它返回当前定位指针位置...; 五、C++文件文件定位 C文件操作方式不同是,C++ I/O系统管理两个与一个文件相联系指针。一个是读指针,它说明输入操作在文件位置;另一个是写指针,它下次写操作位置。...每次执行输入或输出时,相应指针自动变化。所以,C++文件定位分为读位置写位置定位,对应成员函数是 seekg() seekp(),seekg()是设置读位置,seekp是设置写位置。...seek_dir 表示移动基准位置,是一个有以下值枚举: ios::beg: 文件开头 ios::cur: 文件当前位置 ios::end: 文件结尾 这两个函数一般用于二进制文件,因为文本文件会因为系统对字符解释而可能与预想值不同

    66110

    CC++开发基础——IO操作与文件

    在C++编程,流使用步骤如下: 1.实例化一个流对象。 2.将流对象关联到实际外部设备(键盘,控制台,文件,网络等)。 3.调用流对象中提供成员函数,完成数据转换、传输等操作。...readsome:读取若干数量字符。 peek:预览下一个字符。 unget:读取期间,回退一个字符。 tellg:返回流的当前操作位置。 seekg:移动到流指定位置。...std::ifstream文件析构函数会自动关闭底层文件,所以操作完文件流以后不需要显式调用close()函数。...readsome:读取若干数量字符。 peek:预览下一个字符。 unget:读取期间,回退一个字符。 tellg:返回流的当前操作位置。 seekg:移动到流指定位置。...文件输出流操作: operator<<:格式化输出。 put:写入单个字符。 write:写入字符数组。 tellp:返回流的当前操作位置。 seekp:移动到流指定位置。

    23530

    《C++Primer》第十七章 标准库特殊设施

    虽然标准库为所有流类型都定义了seektell函数,但是他们是否会做又有意义事情依赖于流绑定到哪个设备。在大多数系统,绑定到cin,cout,cerrclog流不支持随机访问。...3.1 seektell函数 tellg()tellp():返回一个输入流tellg)或输出流tellp)标记的当前位置 seekg(pos)seekp(pos):在一个输入流或输出流中将标记重定位到给定绝对地址...,pos通常是前一个tellgtellp返回值 seekp(off, from)seekg(off, from):在一个输入流或者输出流中将标记定位到from之前或之后off个字符,from可以是下列值之一...: beg:偏移量相对于流开始位置 cur:偏移量相对于流当前位置 end:偏移量相对于流结束位置 3.2 重定位标记 seek函数有两个版本:一个移动到文件“绝对”地址,另一个移动到给定位置指定偏移量..., from); // 将写标记移动到距from偏移量为offset位置 3.3 访问标记 函数tellgtellp返回一个pos_type值,表示流的当前位置。

    74830

    如何在 Linux 系统防止文件目录被意外删除或修改

    有个简单又有用命令行工具叫chattr(Change Attribute 缩写),在类 Unix 等发行版,能够用来防止文件目录被意外删除或修改。...在这篇简短教程,我们一起来看看怎么在实际应用中使用 chattr 命令,来防止文件目录被意外删除。...Linux防止文件目录被意外删除修改 默认,chattr 命令在大多数现代 Linux 操作系统是可用。...这是我们今天主题,对吧?来开始吧! 防止文件意外删除修改 我先在我的当前目录创建一个file.txt文件。 $ touch file.txt 现在,我将给文件应用 i 属性,让文件不可改变。...防止文件目录被意外删除,但允许追加操作 我们现已知道如何防止文件目录被意外删除修改了。接下来,我们将防止文件被删除但仅仅允许文件被追加内容。

    5.1K20

    文件输入输出

    :binary 二进制文件 【注:ifstream open()方法构造函数用ios_base::in(打开文件以读取)作为模式参数默认值,而ofstream open()方法构造函数用ios_base...若从二进制文件读取数据,可以使用ifstream对象read( )成员函数。该方法从文件内容复制到目标结构。...因此该语句将写入位置设置为编号为112字节,也就是文件第113个字节 【注:如果要检查文件指针的当前位置,则对于输入流,可以使用tellg()方法,对于输出流,可以使用tellp()方法。...它们都返回一个表示当前位置streampos值(以字节为单位,从文件开始处算起)。】 seekg()seekp()函数提供对文件随机存取。...这些类方法使得能够将文件指针放置到相对于文件开头、文件当前位置某个位置。tellg()tellp()方法报告当前文件位置。

    1.5K30

    C++读写文件操作(fstream、ifstream、ofstream、seekg、seekp、tellgtellp用法)

    大家好,又见面了,我是你们朋友全栈君。...本文主要总结用C++fstream、ifstream、ofstream方法读写文件,然后用seekg()、seekp()函数定位输入、输出文件指针位置,用tellg()、tellp()获取当前文件指针位置...一、核心类函数功能讲解 fstream:文件输入输出类。表示文件级输入输出流(字节流); ifstream:文件输入类。表示从文件内容输入,也就是读文件; ofstream:文件输出类。...表示文件输出流,即文件写。 seekg():输入文件指针跳转函数。表示将输入文件指针跳转到指定字节位置‘ seekp():输出文件指针跳转函数。表示将输出文件指针跳转到指定位置。...下面将通过总结一个读写*.txt文件来演示上述输入输出类和文件跳转函数用法。

    3K20

    C++ Java 默认虚拟行为有何不同及其异常处理比较

    默认虚拟行为有何不同 方法默认虚拟行为在 C++ Java 是相反: 在 C++ ,类成员方法默认是非虚拟。...** 二、C++ Java 异常处理比较 两种语言都使用try、catchthrow关键字进行异常处理,并且try、catchfree块含义在两种语言中也相同。...以下是 Java C++ 异常处理之间差异。 1) 在 C++ ,所有类型(包括原始类型指针)都可以作为异常抛出。...在 Java ,有两种类型异常 - 已检查未检查。 5) 在Java,新关键字throws用于列出函数可以抛出异常。...在 C++ ,没有throws关键字,同样关键字throw也用于此目的。 6) 在 C++ ,如果没有捕获到异常,则异常处理子系统会调用函数 unknown(),它会异常终止程序或应用程序。

    92120
    领券