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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu 18.04安装edge浏览器

    ubuntu 18.04安装edge浏览器1.先下载适用于Ubuntu的deb格式安装包2.使用sudodpkg-imicrosoft-edge-dev_****_amd64.deb,安装edge3.安装后会发现打不开,运行以下代码sudoaptinstallmicrosoft-edge-dev4.运行sudoaptinstallmicrosoft-edge-dev后,会出现错误:Unmetdependencies.Try’apt–fix-brokeninstall’withn…

    2022年7月21日
    14
  • cmdping命令_cmd ping端口命令

    cmdping命令_cmd ping端口命令标题cmd-ping命令一、ping命令:通过发送Internet控制消息协议(ICMP)回响请求消息来验证与另一台TCP/IP计算机的IP级连接。相应的回响应答消息的接收情况将和往返过程的时间一起显示出来。Ping是用于检测网络连接性、可到达性和名称解析的疑难问题的主要TCP/IP命令。如果不带参数,ping将显示帮助。(ping-PacketInternet…

    2022年9月23日
    0
  • sql server 数据库分区分表

    sql server 数据库分区分表sqlserver数据库分区分表作为演示,本文使用的数据库sqlserver2017管理工具sqlservermanagementstudio18,,创建数据库mytest,添加Test表,Test表列为id和name,具体可以自行创建sqlserver数据库分区分表具体步骤如下1、选择数据库选择右键新建查询,内容如下–数据库分区分表–1、给数据库mytest添加文件分组ALTERDATABASEmytestaddfilegroupgroup

    2022年5月5日
    160
  • html怎么让背景图片自适应屏幕大小_css背景图片拉伸填充

    html怎么让背景图片自适应屏幕大小_css背景图片拉伸填充html如何让背景图片充满全图,就是拉伸html语言背景图片拉伸代码:background-size:cover,可以使图片拉伸铺满背景。拓展资料背景(background)属性定义元素的背景效果元素的背景区包括前景之下直到边框边界的所有空间。因此,内容框与内边距都是元素背景的一部分。取值:repeat、no-repeat、repeat-x、repeat-y。repeat:默…

    2022年10月5日
    0
  • acwing-278数字组合(0-1背包)[通俗易懂]

    acwing-278数字组合(0-1背包)[通俗易懂]原题链接给定 N 个正整数 A1,A2,…,AN,从中选出若干个数,使它们的和为 M,求有多少种选择方案。输入格式第一行包含两个整数 N 和 M。第二行包含 N 个整数,表示 A1,A2,…,AN。输出格式包含一个整数,表示可选方案数。数据范围1≤N≤100,1≤M≤10000,1≤Ai≤1000输入样例:4 41 1 2 2输出样例:3#include<bits/stdc++.h>using namespace std;const int M = 1e4

    2022年8月9日
    3
  • leetcode-26删除有序数组中的重复项(双指针)「建议收藏」

    leetcode-26删除有序数组中的重复项(双指针)「建议收藏」原题链接给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplicate

    2022年8月8日
    3

发表回复

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

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