问题标签 [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.
c - FILE* 指针的结尾不等于写入数据的大小
很简单地说,我有以下代码片段:
它输出:
这是为什么?为什么写入的字节数与文件指针不匹配?
c - 为什么 fwrite 写的比我告诉它的要多?
输出:
到底是怎么回事?write 设置为 25755,我告诉 fwrite 将这么多字节写入一个文件,它在开头,然后我在 25755 之外的位置?
c - 为什么 ftell( stdin ) 导致非法查找错误
以下代码输出“非法搜索”:
这发生在我跑步时cat script | ./a.out
以及我刚跑步时./a.out
。当然,问题出在 ftell 上。我的问题是:为什么会发生这种情况?我认为标准输入可以搜索。fseek 也会导致相同的错误。如果标准输入不可搜索,有什么方法可以做同样的事情吗?
谢谢您的回复。
c - 第一次调用 fread 后出现 ftell 错误
所以我有一个非常简单的程序来读取文件的前 3 个字节:
当我尝试使用文本文件时,它可以正常工作:
但是当我使用 PNG 运行它时,我得到:
请注意,文件的前 3 个字节确实是 89 50 4E 但我不知道 147 来自哪里。使用 bmp 文件,我得到:
你知道这些第一位置是从哪里来的吗?非常感谢你的帮助
linux - ftell 在文件描述符上?
有没有办法在原始文件描述符而不是 FILE* 上执行 ftell() 所做的事情(返回文件中的当前位置)?我认为应该有,因为您可以使用 lseek() 查找原始文件描述符。
我知道我可以使用 fdopen() 创建与文件描述符相对应的 FILE*,但我宁愿不这样做。
linux - 如何使 lseek64 _actually_ 返回 64 位偏移量?
然后strace:
- 20974464000 == 0x4E22CEC00 - 好
- -500372480 == 0xffffffffe22cec00 - 坏
它更改为(off64_t)lseek64(fd, 0, SEEK_END);
错误地调用 _llseek:
我还应该做些什么来确保它正确获得大小,而不切断主要的 dword?
c++ - 是否存在 fseek/ftell 可能给出错误文件大小的情况?
在 C 或 C++ 中,以下可用于返回文件大小:
是否有开发环境、编译器或操作系统可以根据填充或其他特定于情况的信息从该代码返回错误的文件大小?1999 年左右 C 或 C++ 规范是否发生了变化,这会导致该代码在某些情况下不再工作?
对于这个问题,请假设我通过使用 flags 编译来添加大文件支持-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1
。谢谢。
winapi - 快速访问大文件 - fseek ftell fsetpos fgetpos
我面临着提供对千兆字节文件中选定数据的某种快速访问。一旦我找到了起点,随后的访问将是连续的。这些文件在每条记录的前面都包含一个日期,并且该日期在整个文件中都会增加。我不想从头开始阅读文件而忽略前面的内容。我只对 WINDOWS 应用程序感兴趣。我想以文本模式打开文件。
我突然想到,我可以使用 64 位 fseek/ftell 或 fsetpos/fgetpos 函数进行某种二进制搜索。我意识到我可能会寻找换行符分隔记录的中间,但有人会认为您可以通过 fgets 调用简单地跳过任何部分记录。
fseek 提供了原始 SEEK_END 机制,因此似乎可以与 ftell 一起使用来确定文件大小。我没有看到与 fsetpos/fgetpos 类似的设施。如果您使用 fsetpos/fgetpos,将如何获得文件大小?
_fseeki64/_ftelli64 使用 int64 和 fsetpos/fgetpos 使用的 fpos_t 也是 int64 所以我应该能够对指针进行算术运算。
还是我在这里走错了路?我应该考虑其他方法吗?
c - 覆盖到c中的特定行
我在我的程序中生成了一个大约 2000 行文本的文件,每一行都有一个员工的信息,它的输出是这样的
1 1 ISAAC FONECA 58 C 1600 1310.40 6 1 0.22 2164.80 1
2 1 Manuel Gutierrez 22 D 1700 1523.37 4 1 0.13 897.26 1
3 1 Daniel Bernal 34 C 1600 1195.84 2 1 0.26 836.16 1
4 1 Miguel Gonzalez 43 E 1800 1195.84 0 1 0.15 0.00 1
但是每当我编辑员工信息时,我都必须更新文件,我正在做的是我搜索该行并尝试重写它
我已经看到有同样问题的人的以下问题,但是当我尝试写入文件时,它总是写入文件末尾
这是我的代码:
c - ftello/fseeko vs fgetpos/fsetpos
ftello
/fseeko
和fgetpos
/和有什么不一样fsetpos
?两者似乎都是使用不透明偏移类型的文件指针获取/设置函数,有时允许 64 位偏移。
它们是否在不同的平台或不同的标准上得到支持?它使用的偏移类型是否更灵活?
而且,顺便说一句,我知道fgetpos/fsetpos 和 ftell/fseek 之间有什么区别,但这不是重复的。该问题询问有关 ftell/fseek 的问题,而答案不适用于 ftello/fseeko。