C语言的seekg函数,C++ seekg函数用法详解[通俗易懂]

C语言的seekg函数,C++ seekg函数用法详解[通俗易懂]很多时候用户可能会这样操作,打开一个文件,处理其中的所有数据,然后将文件倒回到开头,再次对它进行处理,但是这可能有点不同。例如,用户可能会要求程序在数据库中搜索某种类型的所有记录,当这些记录被找到时,用户又可能希望在数据库中搜索其他类型的所有记录。文件流类提供了许多不同的成员函数,可以用来在文件中移动。其中的一个方法如下:seekg(offset,place);这个输入流类的成员函数的名字se…

大家好,又见面了,我是你们的朋友全栈君。

很多时候用户可能会这样操作,打开一个文件,处理其中的所有数据,然后将文件倒回到开头,再次对它进行处理,但是这可能有点不同。例如,用户可能会要求程序在数据库中搜索某种类型的所有记录,当这些记录被找到时,用户又可能希望在数据库中搜索其他类型的所有记录。

文件流类提供了许多不同的成员函数,可以用来在文件中移动。其中的一个方法如下:

seekg(offset, place);

这个输入流类的成员函数的名字 seekg 由两部分组成。首先是 seek(寻找)到文件中的某个地方,其次是 “g” 表示 “get”,指示函数在输入流上工作,因为要从输入流获取数据。

要查找的文件中的新位置由两个形参给出:新位置将从由 place 给出的起始位置开始,偏移 offset 个字节。offset 形参是一个 long 类型的整数,而 place 可以是 ios 类中定义的 3 个值之一。起始位置可能是文件的开头、文件的当前位置或文件的末尾,这些地方分别由常量 ios::beg、ios::cur 和 ios::end 表示。

有关在文件中移动的更多信息将在后面的章节中给出,目前先来关注如何移动到文件的开头。要移到文件的开始位置,可以使用以下语句:

seekg(0L,ios::beg);

以上语句表示从文件的开头位置开始,移动 0 字节,实际上就是指移动到文件开头。

注意,如果目前已经在文件末尾,则在调用此函数之前,必须清除文件末尾的标志。因此,为了移动到刚读取到末尾的文件流 dataln 的开头,需要使用以下两个语句:

dataIn.clear();

dataIn.seekg(0L, ios::beg);

下面的程序演示了如何倒回文件的开始位置。它首先创建一个文件,写入一些文本,并关闭文件;然后打开文件进行输入,一次读取到最后,倒回文件开头,然后再次读取:

//Program shows how to rewind a file. It writes a text file and opens it for reading, then rewinds

// it to the beginning and reads it again.

#include

#include

using namespace std;

int main()

{

// Variables needed to read or write file one character at a time char ch;

fstream ioFile(“rewind.txt”, ios::out);

// Open file.

if (!ioFile)

{

cout << “Error in trying to create file”;

return 0;

}

// Write to file and close

ioFile << “All good dogs” << endl << “growl, bark, and eat.” << endl;

ioFile.close();

//Open the file

ioFile.open (“rewind.txt”, ios::in);

if (!ioFile)

{

cout << “Error in trying to open file”;

return 0;

}

// Read the file and echo to screen

ioFile.get(ch);

while (!ioFile.fail())

{

cout.put(ch);

ioFile.get(ch);

}

//Rewind the file

ioFile.clear();

ioFile.seekg(0, ios::beg);

//Read file again and echo to screen

ioFile.get(ch);

while (!ioFile.fail())

{

cout.put(ch);

ioFile.get(ch);

}

return 0;

}

程序输出结果:

All good dogs

growl, bark, and eat.

All good dogs

growl, bark, and eat.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131548.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • System.setProperty用法

    System.setProperty用法setProperty(Stringprop,Stringvalue)—–设定健值对到系统内存中(操作系统变量的方法)。首先我们来了解一下参数:prop-系统属性的名称。value-系统属性的值正确的返回值情况:系统没有查到健值,返回null,查到的话返回value值。抛错情况:SecurityException-如果安全管理器存在并且其checkPermission方法不允许设置指定属性。NullPointerException-如果key或v.

    2022年7月12日
    58
  • PCBlayout设计「建议收藏」

    PCBlayout设计「建议收藏」一、PCB设计流程一般来说PCB基本设计流程:前期准备->PCB结构设计->PCB布局->布线->布线优化和丝印->网络和DRC检查和结构检查->制板。1、前期准备包括准备元件库和原理图,在开始进行布板时,得先完成原理图的设计。我们公司基本是用Protel99画图,我们常用的元件库也都基本具备,也是我们公司常用的标准。对于一些元件没有元件库的,需要自己根据元件

    2025年7月15日
    3
  • WPS2012交叉引用技巧,word比wps这点强更新參考文献

    WPS2012交叉引用技巧,word比wps这点强更新參考文献

    2021年12月5日
    47
  • 经典欧美电影推荐

    经典欧美电影推荐

    2021年5月4日
    93
  • win10专业工作站版命令提示符激活【中文破解版】2022.01.24

    (win10专业工作站版命令提示符激活)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    91
  • java获取当前时间戳转换

    java获取当前时间戳转换 packagecom.pts.peoplehui.utils; importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;importjava.util.Locale; publicclassDateUtils{    publicstaticString…

    2022年4月30日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号