问题标签 [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 回答
237 浏览

c++ - C ++寻求奇怪的行为,也许是限制?

我有一个非常大但按字典顺序排列的文本文件,我需要在其中尽快找到条目。为了不遍历特定条目的整个内容,我存储了某些关键位置,例如 a-->0、b-->4092 等,其中字符是其自身的第一次出现,数字是它的位置,这是通过使用 getline() 解析整个文件一次并将每个字符串的长度添加到计数变量中获得的。目标是,我可以使用 seekg(pos) 跳过文件以稍微本地化搜索。它似乎也有效,但有时它不起作用,我来这里问为什么。相关代码看起来或多或少是这样的:

第二个 getline 是为了以防流跳到一行的末尾。在第一种情况下,没有输出。只是一个空字符串。在第二种情况下,输出是来自文本文件的普通行。文件本身不包含空行。

我有点不知所措。首先,我认为 fpos 数据类型(在 seekg 中使用)可能非常小,无法处理 ~10.000 以上的数字,但后来我碰巧从 99.000 范围内得到了有效的查找。有没有人遇到过类似的问题?

编辑:我刚刚找到了问题的可能原因。在另一个处理 seekg 的线程中,建议重新打开 ifstream 以清除故障标志。我这样做了,现在至少随后的调用产生了一些东西。这告诉我,调用时显然有些事情出错了txtFile.seekg(pos1, txtFile.beg);,但这不是文件结尾。

编辑 2:我刚刚检查过,在 getline 调用之后设置了失败位,但没有得到任何东西。

0 投票
2 回答
259 浏览

c++ - 从特定填充读取到 C++ 中的最后一行

我有一个包含多行的文本文件。我想将每一行存储在字符串向量中。我想从文件中读取直到到达最后一行。我使用了 EOF 函数,但它似乎也在最后一行之后存储了空行。这是我的代码片段。text_list 是一个向量,其中存储了文件的所有行。

0 投票
1 回答
924 浏览

c++ - 从 fstream 读取后,如何将光标设置回预读位置?

我正在修改二进制数据的读取例程。不幸的是,我在 C++ 方面不再那么坚定了,这是编写例程所用的语言。例程开始读取一些数据。之后,我希望它查看我也从文件中读取的缓冲值。根据值,代码应该做某事并在之后正常继续,或者撤消读取缓冲区并正常继续。

我的问题是撤消或恢复光标位置,如果你愿意的话。剥离的代码如下所示:

我假设我可以在 int 中使用负值,seekg()因为我发现 int 只是逻辑上的并且没有读到任何相反的东西。以上哪种方式是正确的?或者基本上我在问第一个论点实际上期望什么?seekg()

C++ 参考仅说明了这一点:

哪个没有告诉我单位off是用(字节,字符,整数?)来衡量的。

0 投票
2 回答
12967 浏览

c++ - 在c ++中以字节块读取和写入文件

我到处搜索它,但我似乎无法理解如何使用 ios::cur。我需要以 10 个字节的块读取整个文件,将这些字节写入缓冲区,然后将该缓冲区写入另一个文件。为此,我发送前 10 个字节,然后发送接下来的 10 个字节,依此类推。但是我如何确保指针从最后一次迭代的位置开始?

0 投票
0 回答
182 浏览

c++ - 在空字符串流上调用 seekg 失败

这是我的问题。我想从字符串流中多次读取一个字符串,所以我使用 seekg(0)将当前位置重置为流的开头。

但是 stringstream 似乎将空字符串的偏移量初始化为 -1。然后 seekg 检查 offest,设置 failbit 错误。

有处理这个案子的想法吗?

注意:我使用的是 VS2005。

0 投票
1 回答
253 浏览

c++ - fstream seeking: position stays at -1

I constructed a class for dealing in a certain file formal and it's constructor goes through the file and searches for the key information I need - the idea is characters are written on multiple lines, and I want to read the first character of every line, the second character of every line and so on.

I've got the constructor and definition below (possibly horrible - this is my first time writing anything serious in C++),

Apologies for it being quite the chunk,anyway the constructor goes through char by char and gets the starting points of each line to be read. The get function (not shown) then goes through and seeks to the start of each line + how many more to get to the right character - given by the member variable CurrentPos. It then constructs another custom object of mine called AlignedPosition and returns it.

As you can see the first loop iterates through the start position of each line + the CurrentPosition and then gets the char and pushes it back onto a vector, this vector is passed to my AlignedPosition constructor, everything else is messages for debugging. However upon execution I see this:

In short what I see is that the file stream position is -1 and does not change when seeks is used.Which leads to invalid characters and an exception getting thrown in my AlignedPosition constructor. Is this something do do with already having navigated through the file until the end in my constructor? Why does my position in the input stream remain at -1 all the time?

Thanks, Ben.

0 投票
2 回答
741 浏览

c++ - 在 C++ 中使用 seekg 的问题

我正在通过这样的函数读取文件:

Mi 文件有 3 行:

我期望输出:

相反,我得到:

为什么我的 seekg 不起作用?

0 投票
1 回答
4394 浏览

c++ - 使用 istream::seekg 太贵了吗?

在 c++ 中,使用 istream::seekg 操作的成本是多少?

编辑:寻找文件和读取字节我能逃脱多少?频率与偏移量的关系如何?

我有一个正在解析的大文件(4GB),我想知道是否有必要尝试合并我的一些 seekg 调用。我认为文件位置差异的大小会起作用——比如,如果你在内存中寻找超过一页,它会影响性能——但小的寻找并不重要。这个对吗?

0 投票
0 回答
116 浏览

c++ - 提取运算符导致我的程序退出?

我是一个普通的潜伏者,但这是我的第一篇文章!我知道你们喜欢细节,所以我会尽力而为。我会感激任何人的任何意见。

我正在为具有动态数字数组的对象重载提取运算符。控制台输入将具有前导空格,然后是 int,然后是后面的任何内容。我需要忽略空白,提取 int,然后不理会其余部分。容易吧?

这是我在网上找到的代码示例:

现在,我知道这种方法可能有效,但对我来说,这似乎是一种效率极低的方法。对于一万亿位数字,Grow() 将重新分配数组一万亿次!也许这并没有我想的那么糟糕?

我目前的方法是使用 seekg() 和 peek() 和 get()。像这样:

另外,这是我的主要内容:

对于我的生活,我找不到导致我的程序退出的原因。最后的输出似乎说,'B 现在:-1'

我相信这意味着 << B 失败。我目前已将 B 初始化为 0,并且我的其余代码没有出现其他问题。它的私有成员数据仅包括指针和长度(位数)。C2I() 也是一个将 '0' 到 '9' 转换为 0 到 9 的函数。

对我来说一个大问题是我对解析相当陌生,所以我没有非常雄辩的方法来测试这个或其他想法。

我再次感谢你们所做的一切。我已经从浏览这里学到了很多东西!

0 投票
0 回答
66 浏览

c++ - 已经打开的文件如何覆盖?

我遇到以下问题:

我的程序打开一个文件并将其所有内容复制到一个向量中。之后,我需要回到文件的开头并以另一个顺序重写内容。

我尝试使用clearand seekp,但没有用。任何人都可以帮助我吗?

这是代码:

first_index是我正在使用的文件: