问题标签 [ftell]

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 投票
0 回答
373 浏览

c - 使用 C.UTF-8 作为当前语言环境时 fseek/ftell 的意外结果

我正在测试 fseek 和 fgetpos 的交互(更准确地说,如果我能得到一个多字节内的 fpos_t )并进入了一个非常意想不到的情况。

每当我使用setlocale(LC_CTYPE, "C.UTF-8");andfputwc时, fseek似乎不再起作用,在文件内移动光标的唯一方法是使用fgetwc.

代码如下(所有调用成功完成,即 setlocale、fseek、fputwc 等,为简洁起见,我剥离了对返回值的检查)。

这发生在带有 glibc 2.16 的 Ubuntu 上。有没有人有一个很好的解释为什么会发生这种情况?这是glibc中的错误吗?

一些注意事项:

  • 如果我关闭文件并以 read more 重新打开它,那么一切都按预期工作(之后fseekftell_out/ fpos_outare1并且fgetwc失败,errno因为位置在多字节内)

  • 如果我不使用setlocale输出几乎如预期的那样,除了fgetwc不再设置errno

0 投票
3 回答
5624 浏览

c - 为什么 ftell 在这个函数中返回 0?

当我运行我的程序并选择查看产品列表时,它不会打印任何内容。一段时间后,我发现 的值fl_size始终为 0。这是为什么呢?

0 投票
1 回答
2451 浏览

python - 在 Python 中获取文件描述符的位置

说,我有一个原始数字文件描述符,我需要根据它获取文件中的当前位置。

下面的代码lib是一个编译的库,它不提供对文件对象的访问权限。在循环中,我使用read返回处理数据的嵌入式方法。数据及其长度与文件位置无关,因此我无法从数学上计算偏移量。

我尝试使用fdopen, as fd = fdopen(p.get_open_files()[0].fd),但print fd.tell()仅返回文件中的第一个位置,该位置未在循环中更新。

有没有办法根据文件描述符获取文件中的当前实时位置?

0 投票
0 回答
715 浏览

c - ftell/fgetpos 在处理 UTF-8 文本文件时无法获得正确的位置

在 VStudio 2012 + Win7 下测试

UTF-8 文本文件仅包含 5 个字节:

在文本模式下,它将显示如下:

来源也很简单:

但是,在调试程序时,第一个ftell()返回的位置值是 1 而不是 2...所以当_fgetts()第二个文本行被调用时,它只会得到一个 CR 标记而不是 character 2

我想知道在文本模式下处理文件是否能力不足"r,ccs=UTF-8"(示例在"r"模式下运行良好编辑:不是真的!第一个 ftell() 返回 0。感谢 Hans 指出))。
(更奇怪的是,ftell()当 UTF-8 文本文件包含任何非 ANSI 字符时,它可以正常工作......但让我们先解决纯 ANSI 文件。是的,我已经在论坛中搜索过,但令人惊讶的是没有找到类似的提问者)

到目前为止,最好的解决方法是在"r"模式下读取字符串行,然后将它们从 UTF-8 编码转换为 Unicode 编码。任何更熟练的建议将不胜感激。


----- 更新分隔符 (2015/03/25) -----

在 MinGW + Win7 和 GCC + CentOS 下测试

在收到以下关键点的宝贵意见时,

  • 编译器实现:Microsoft vs GNU @nm
  • 内部缓冲区使用不准确ftell()@Hans Passant

    • 固定长度编码(例如“r”模式)与可变长度编码(例如“r,css=UTF-8”模式)
    • 1 字符行尾(单个 LF)与 2 字符行尾(CR+LF)@Hans Passant,@IInspectable

我决定在复合条件下测试这个问题。

使用的文本文件

使用的源代码(用于 GNU 编译器)

结果#1:“r”模式,GNU+Win7

结果#2:“r,ccs=UTF-8”模式,GNU+Win7,带/不带 setlocale()

结果#3:"r,ccs=UTF-8" 模式,GNU+ CentOS,带setlocale()

结论

  • 对于 GNU+CentOS,如果(且仅当)setlocale()被使用,ftell()效果很好。我想那是因为单 LF 行尾是 Unix 的标准。
  • 但是,对于 Windows,如果您使用单 LF 或"ccs=UTF-8"模式,ftell()则会在没有警告的情况下为您提供不准确的返回值......setlocale()这里没有区别。但是 BOM 附加的 UTF-8/UTF-16 文件可以完美处理......这意味着ftell()可能有处理可变长度编码的能力?
    最后,如前所述,"r"模式(符合 CR+LF 行尾规则)将“拯救世界”。~

@Hans Passant,@nm,如果我遗漏了什么,请修改结论。

0 投票
3 回答
5809 浏览

php - a+ 和带有 fopen() 的模式

根据手册,如果您a/a+在函数中选择模式fopen(),文件指针将放在末尾。

但是为什么我得到 0 使用ftell()并且feof()仍然返回false?如果文件指针在末尾。

例如:

我得到了 1,但如果文件指针放在末尾,我不应该得到 0 吗?

0 投票
3 回答
4095 浏览

c - 从文件中读取并设置偏移量?

我是 C 新手,我正在尝试构建一个 C 程序,它扫描文件直到 EOF,挑选出包含某个关键字的行,然后在搜索最后一行后设置偏移量。当再次执行扫描时,它会扫描文件,这次从保存的偏移量开始并继续向下直到 EOF。

我正试图围绕文件 I/O 的不同功能展开我的头脑,但我无法将调用 fopen()、fseek()、fgets()、ftell() 等的过程拼凑起来做我想做的事它要做。谁能指出我正确的方向或引导我完成完成这项工作所需的内容?

谢谢!

0 投票
2 回答
1748 浏览

android - ftello() 和 fseeko() android 构建错误

我正在尝试为 64 位架构构建 Android L。

我的代码如下:

我得到以下ftello错误fseeko

我检查了fseekoand ftello,在手册页上提到_FILE_OFFSET_BITS用值 64 定义将off_t变成 64 位类型。我仍然看到这个错误。我检查了这个错误,但找不到任何令人满意的答案。

如果有人可以帮助我,那将非常有帮助。

0 投票
3 回答
648 浏览

c - fgetpos() 和 fsetpos() 是否仅适用于文本模式?如果不是字节数,fpos_t 对象填充了哪些位置/偏移数据?

我了解 C 中 ftell() 和 fseek() 的工作原理,但是对于这个问题,我在任何地方都找不到任何准确的答案,包括 StackOverflow( LINK ) 上最近的帖子。

那么您能否回答以下问题:

  • 是否可以断定 fgetpos() 和 fsetpos() 仅与以文本模式打开的文本文件相关,而与以二进制模式打开的文件无关?
  • 什么样的位置信息是由 fgetpos() 填充的 fpos_t 对象,假设它不是像 ftell() 给出的那样的长整数偏移量等?站点cplusplusreference仅告诉以下内容:

该函数用流位置指示符所需的信息填充 pos 指向的 fpos_t 对象,以将流恢复到其当前位置

0 投票
2 回答
443 浏览

c++ - fseek() 将指针设置为错误的位置

我有一个具有以下结构的 .dat 文件:

我正在尝试找出哪个对象的面积最小。我读取了整个文件并使用 ftell() 跟踪具有最小区域的对象及其位置。当我读完文件后,我将流位置指示器设置为从 ftell() 获得的任何值。然后我读了那行作为我的最终结果,但现在,我读错了。

对象.dat:

代码:

输出:

0 投票
0 回答
643 浏览

c++ - fseek, ftell 导致分段错误

我正在尝试使用 fseek 查找文件的末尾,一次以 2560 * 5 个字节的步长查找。不知道为什么会出现分段错误,我在 TDA2x 板上运行此代码。这是我不知道的特定环境中的问题吗?

uNumFrames 的起始值为 1000 这段代码基本上是尝试从外部连接的 SSD 驱动器读取数据,并且正在逐字节读取文件,使用 fseek 跳过文件中的某些容器。我面临的问题是,在尝试读取这样的文件时,代码因以下详细信息而崩溃

示例输出如下所示: