C++ seekg() 函数

2024年8月28日 | 阅读 4 分钟

引言

在本文中,我们将了解 C++ 中的 seekg() 函数seekg() 函数 允许访问 iostream 库 中的任何文件位置。它是文件处理的一个组成部分,可以在 fstream 头文件 中找到。它用于通过将指针定位到所需字符的下一个位置来从 输入流 中提取数据。

seekg() 函数的语法

seekg() 方法 可以使用以下两种语法之一

第一种语法

第二种语法

C++ 中 seekg() 的参数

C++ 中的 seekg() 函数 有多种参数。这些参数如下

位置

streampos 数据类型 用于通过表示 int 值 将指针设置为流缓冲区中的特定位置。窄流中的位置由 fpos 类的一个实例表示,称为 streampos。此类的对象允许与 streamoff 值 之间进行一致的转换,以及从 int 创建和转换。

dir

它是由变量 ios_base::beg、ios_base::curios_base::end 指示的方向,这些变量指向文件的 开头、中间结尾

offset

它用于 dir,类型为 streamoff。指针通过给定偏移量的值向 dir 前进。

seekg() 函数的返回值

在 C++ 编程语言中,seekg() 函数 将指针设置为文件中请求的位置。它修改文件中的指针并返回 istream 对象 (*this)

C++ 中的 seekg() 异常

基本保证: 如果引发 异常,对象仍然有效。如果错误状态标志未充分指示结果且为该状态设置了成员异常,则将引发成员类型失败异常。

函数 捕获并 处理 任何异常,这也会设置 内部操作 引发的任何坏位。如果上次调用异常时设置了坏位,则该函数将 重新抛出 捕获的 异常

发现的问题

如果 seekg() 函数 指向文件末尾,它将失败,并且指针不会重置。使用 clear() 函数 重置指针以避免此问题。

数据竞争

流对象修改。由于同时使用相同的流对象,可能会发生 数据竞争。当多个位置同时访问同一个流对象时,就会发生 数据竞争

C++ 中 seekg() 函数如何工作?

有两种方法可以使用 seekg() 方法。这些方法如下

1. Istream &Seekg (streampos position)

确定指针更改位置的参数是位置。

算法

首先,打开一个 新文件 进行 I/O 操作。例如,文件名将是 "jtp.txt"。假设文件的当前位置是 2。在文件中写入 几个字符,例如 "welcome to JTP"。从指针当前所在的位置,查找 3 个字符,即到 5

将文件内容写入缓冲区,然后关闭缓冲区。

2. istream&seekg(streamoff offset, seekdirdir, ios_base::seekdir offset)

指针的偏移量 是它跳过并前进的值。指针的初始方向由字母 dir 表示。

算法

首先,打开一个 新文件 进行 I/O 操作。为了说明,这次将 文件名 设置为 "jtp2.txt"。再次向文件中添加 一些字符。例如,这次让它显示 "welcome to jtp"。现在找到 前 3 个字符, 即到 3

根据以上两种方法,代码如下

jtp.seekg(3) ;

jtp2.seekg(3, ios::beg) ;

C++ 中 Seekg() 函数的示例

让我们以下面的代码为例,使用带偏移量的 seekg() 函数

  • 从文件系统中查看文件。
  • 在那里包含一些文本。
  • 查找文件的前 4 个字符。
  • 文件的接下来的五个字符的内容被复制到缓冲区中。
  • 打印缓冲区中的数据。

编码

输出

Copied data from the file: o, th

结论

Seekg() 函数 是 C++ 编程语言中的一个函数,有助于在 iostream 库 中获取任意文件位置。seekg() 函数 有两种可能的语法:istream&seekg(streampos position)istream&seekg(streamoff offset, ios_base::seekdirdir)

int 值 用于 设置 指针 到流缓冲区中的特定位置,该位置由编程中使用的 streampos 类型参数 position 表示。

方向由参数的 ios_base::beg、ios_base::curios_base::end 值指示。dir 是指向文件的 开头、当前位置结尾 的方向。