问题标签 [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.
c++ - get() 的异常行为(从 C++ 中的文件读取)
因此,我编写了这个程序来打印文本文件的最后 10 行。但是它只打印最后 5 ,由于某种原因,每次遇到实际的 '\n' 时,下一个 get() 也会给出一个 \n 导致不正确的输出。这是我的输入文件:
我在 Windows 上使用记事本,这是我的输出:
我无法弄清楚为什么会这样,请帮忙。
c++ - 输出用二进制文件 C++ 编写的双精度
我有一个名为“obj”的类,它有两种数据类型,一种是 int,一种是 double。我试图只阅读第三个对象,但似乎无法弄清楚。在我将其中一种数据类型更改为加倍之前,它正在工作。我觉得这与类型转换有关。总而言之,在写入文件后,我无法让它只输出第三个对象。有什么建议么?
c++ - std::ifstream::seekg 没有因荒谬的偏移而失败
显然,在 Linux (Centos 7, g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)) 上,您可以在打开以供阅读的文件中寻找荒谬的偏移量。我可以自己获取文件长度并检查偏移量,但是 seekg 不应该失败吗?
这个程序说明了。未检测到错误条件,但文件的长度远小于 999999 字节。
c++ - C++ 不能用 peek 写文件;使用 fstream
我在 C++ 中创建了一个使用流写入文件的函数。我希望在调用此代码时覆盖该文件。当我添加一个 fstream.peak 以了解下一个字符时,我的文本文件中没有写入任何内容。如果他们返回 -1,我希望他们写在我的文本文件中的 X 位置。这是我的代码(请注意,我从 C++ 开始..)感谢您未来的帮助!:)
c++ - ifstream::seekg 给出错误的结果
我正在玩 ifstream 来熟悉它。我正在尝试使用 seekg 来告诉文件的位置,但它给了我错误的结果。
这个想法是:
- 打开文件
- 文件的打印位置
- 从文件中读取一个字符
- 文件的打印位置
- 从文件中读取一个字符
- 文件的打印位置
- 关闭文件。
原始文件如下所示(windows 格式):
文件.txt
运行我的代码,我得到了结果:
但是,对于这个文件:
文件.txt
我得到这些结果
这是我使用的代码:
test.cpp (mingw/gcc5.3)
下面分别是两个文本文件的两个十六进制编辑器视图:
我预计两者都会分别产生结果 0、1、2,但原始实验并非如此。
有人可以解释这里发生了什么吗?
问题:
- 我应该怎么做才能获得正确的文件位置?
答:使用
ifstream("file.txt", ios_base::in | ios_base::binary)
构造函数而不是ifstream("file.txt")
构造函数。
- 是什么导致 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。总的来说,这两个问题有不同的背景,知道该问题的答案并不能回答这个问题。
c++ - 读取文本文件时 seekg() 的奇怪偏移
我正在尝试获取文件的最后一行,使用此处描述的逻辑最快的方法来读取文本文件的最后一行?,但我得到了一些奇怪的异常:
将我的流重置为相同的字符,所以我得到无限循环。但是,将其设置为-3
完美工作:
同样,问题是 - 此代码仅适用于seekg()
offset -3
,而理论上它应该适用于-2
. 这可以以某种方式解释吗?文件内容是这样的(文件末尾的换行符):
我使用的是 Windows,所以现在我明白了为什么我需要-3
从文件末尾偏移(以传递CR和LF字节)。但是让我们考虑第一个字符(从结尾)。
因此,流到达7
. 它提取它,并移动到CR字节。如果,那么,在下一次循环迭代中我们将它偏移-3
,我们会得到0
,但不是1
!但实际上,我得到了1
!并且在-3
偏移量下一切正常。这对我来说是个谜。我无法摆脱它。
c++ - 如何使用 fread 正确缓冲行
fread()
出于某种原因(速度和...),我想用于 IO。我有一个不同大小的行的文件。通过使用如下代码:
最后一行可能读不完整,下次试读时必须重新读最后一行,那么如何强制fread()
从最后一行的开头继续?
或者如果可能的话,如何强制fread()
读取超过 500MB 直到达到 \n 或另一个特定字符?
谢谢大家
阿米尔。
c++ - 使用 seekg() C++ 倒带流
我是 C++ 新手。这是实际运行的程序的一部分,没有内存泄漏。它读取一行,计算每行有多少双精度(aux_d),如果它等于暗淡(尺寸),它就 push_back 到向量中。
读取行,然后倒回 istringstream fss。但是当我打印我的 v_db[i] (vector_database) 时,它只会将零加载到坐标类中。
...做一些事情然后
所以我这样做只是为了让它工作。
我想知道这里到底发生了什么,因为我以前用过相同目的的 seekg,并且根本没有任何问题(实际上在这个程序中)。谢谢。
c++ - C++入门第5版第17.5.3章fstream没有换行
这是C++ 入门书第 5 版第 17 章 (17.5.3) 的示例代码。
该文件的内容test.txt
是:
关键是,如果此文件以空行结尾,则此代码按预期工作。换句话说,它将文件更改为:
但是,如果文件没有以空白新行结尾,它将输出如下:
请注意,此文件不以新行结尾。我的问题是空白的新行在哪里?毕竟有代码
无论如何,它都应该放置一个新的空行。哪里错了?
c++ - Seekg 未按预期运行
我的代码包含在 std::cin 上的 seekg(0) 函数的实现,当运行时它在某些文件上的行为不符合预期
./a.out < filename
那些行为不符合预期的文件具有字符数(包括结束行字符和其他空格)小于 9 的属性(9 是我们在 seekg 之前从 cin 读取的字符数)
如果文件包含超过 9 个字符,则它的行为符合预期,例如:
123456789
将输出为
123456789
而包含少于 9 个字符的文件不会给出输出
例如:
1234
不会输出