问题标签 [seekg]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
38 浏览

c++ - get() 的异常行为(从 C++ 中的文件读取)

因此,我编写了这个程序来打印文本文件的最后 10 行。但是它只打印最后 5 ,由于某种原因,每次遇到实际的 '\n' 时,下一个 get() 也会给出一个 \n 导致不正确的输出。这是我的输入文件:

我在 Windows 上使用记事本,这是我的输出:

我无法弄清楚为什么会这样,请帮忙。

0 投票
1 回答
198 浏览

c++ - 输出用二进制文件 C++ 编写的双精度

我有一个名为“obj”的类,它有两种数据类型,一种是 int,一种是 double。我试图只阅读第三个对象,但似乎无法弄清楚。在我将其中一种数据类型更改为加倍之前,它正在工作。我觉得这与类型转换有关。总而言之,在写入文件后,我无法让它只输出第三个对象。有什么建议么?

0 投票
0 回答
215 浏览

c++ - std::ifstream::seekg 没有因荒谬的偏移而失败

显然,在 Linux (Centos 7, g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)) 上,您可以在打开以供阅读的文件中寻找荒谬的偏移量。我可以自己获取文件长度并检查偏移量,但是 seekg 不应该失败吗?

这个程序说明了。未检测到错误条件,但文件的长度远小于 999999 字节。

0 投票
0 回答
193 浏览

c++ - C++ 不能用 peek 写文件;使用 fstream

我在 C++ 中创建了一个使用流写入文件的函数。我希望在调用此代码时覆盖该文件。当我添加一个 fstream.peak 以了解下一个字符时,我的文本文件中没有写入任何内容。如果他们返回 -1,我希望他们写在我的文本文件中的 X 位置。这是我的代码(请注意,我从 C++ 开始..)感谢您未来的帮助!:)

0 投票
1 回答
1022 浏览

c++ - ifstream::seekg 给出错误的结果

我正在玩 ifstream 来熟悉它。我正在尝试使用 seekg 来告诉文件的位置,但它给了我错误的结果。

这个想法是:

  1. 打开文件
  2. 文件的打印位置
  3. 从文件中读取一个字符
  4. 文件的打印位置
  5. 从文件中读取一个字符
  6. 文件的打印位置
  7. 关闭文件。

原始文件如下所示(windows 格式):

文件.txt

运行我的代码,我得到了结果:

但是,对于这个文件:

文件.txt

我得到这些结果

这是我使用的代码:

test.cpp (mingw/gcc5.3)

下面分别是两个文本文件的两个十六进制编辑器视图:

原始修改在此处输入图像描述 在此处输入图像描述

我预计两者都会分别产生结果 0、1、2,但原始实验并非如此。

有人可以解释这里发生了什么吗?

问题

  1. 我应该怎么做才能获得正确的文件位置?

答:使用ifstream("file.txt", ios_base::in | ios_base::binary)构造函数而不是ifstream("file.txt")构造函数。

  1. 是什么导致 f.tellg 默认给出这些奇怪的值 0,6,7 而不是预期的 1,2,3?

可能的解释(测试下面 Holt 的答案)

此代码中的 f.tellg 求助于f.rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in)负责产生值 0、6、7(但仅当ios_base::binary在构造/打开时未指定时)。

请注意,作为第二个参数传递ios::in | ios::binary给 ifstream 构造函数会使两个文件都按预期运行,但我也想知道是什么导致默认行为给出这些奇怪的 tellg 值。

注意tellg() 函数的区别给出错误的文件大小?. 该问题默认设置了 ios::binary ,并使用 seek; 这里的这个问题有 ios::binary 和没有,并且不使用 seek。总的来说,这两个问题有不同的背景,知道该问题的答案并不能回答这个问题。

0 投票
1 回答
660 浏览

c++ - 读取文本文件时 seekg() 的奇怪偏移

我正在尝试获取文件的最后一行,使用此处描述的逻辑最快的方法来读取文本文件的最后一行?,但我得到了一些奇怪的异常:

将我的流重置为相同的字符,所以我得到无限循环。但是,将其设置为-3完美工作:

同样,问题是 - 此代码仅适用于seekg()offset -3,而理论上它应该适用于-2. 这可以以某种方式解释吗?文件内容是这样的(文件末尾的换行符):

我使用的是 Windows,所以现在我明白了为什么我需要-3从文件末尾偏移(以传递CRLF字节)。但是让我们考虑第一个字符(从结尾)。

因此,流到达7. 它提取它,并移动到CR字节。如果,那么,在下一次循环迭代中我们将它偏移-3,我们会得到0,但不是1!但实际上,我得到了1!并且在-3偏移量下一切正常。这对我来说是个谜。我无法摆脱它。

0 投票
1 回答
464 浏览

c++ - 如何使用 fread 正确缓冲行

fread()出于某种原因(速度和...),我想用于 IO。我有一个不同大小的行的文件。通过使用如下代码:

最后一行可能读不完整,下次试读时必须重新读最后一行,那么如何强制fread()从最后一行的开头继续?

或者如果可能的话,如何强制fread()读取超过 500MB 直到达到 \n 或另一个特定字符?

谢谢大家

阿米尔。

0 投票
1 回答
103 浏览

c++ - 使用 seekg() C++ 倒带流

我是 C++ 新手。这是实际运行的程序的一部分,没有内存泄漏。它读取一行,计算每行有多少双精度(aux_d),如果它等于暗淡(尺寸),它就 push_back 到向量中。

读取行,然后倒回 istringstream fss。但是当我打印我的 v_db[i] (vector_database) 时,它只会将零加载到坐标类中。

...做一些事情然后

所以我这样做只是为了让它工作。

我想知道这里到底发生了什么,因为我以前用过相同目的的 seekg,并且根本没有任何问题(实际上在这个程序中)。谢谢。

0 投票
1 回答
88 浏览

c++ - C++入门第5版第17.5.3章fstream没有换行

这是C++ 入门书第 5 版第 17 章 (17.5.3) 的示例代码。

该文件的内容test.txt是:

关键是,如果此文件以空行结尾,则此代码按预期工作。换句话说,它将文件更改为:

但是,如果文件没有以空白新行结尾,它将输出如下:

请注意,此文件不以新行结尾。我的问题是空白的新行在哪里?毕竟有代码

无论如何,它都应该放置一个新的空行。哪里错了?

0 投票
1 回答
81 浏览

c++ - Seekg 未按预期运行

我的代码包含在 std::cin 上的 seekg(0) 函数的实现,当运行时它在某些文件上的行为不符合预期 ./a.out < filename

那些行为不符合预期的文件具有字符数(包括结束行字符和其他空格)小于 9 的属性(9 是我们在 seekg 之前从 cin 读取的字符数)

如果文件包含超过 9 个字符,则它的行为符合预期,例如:

123456789

将输出为

123456789

而包含少于 9 个字符的文件不会给出输出

例如:

1234

不会输出