问题标签 [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++ - CStdioFile 不能处理大于 2GB 的文件?
我正在使用 Visual C++ 2008。在 VC++ 2008 中,CFile
支持 2^64 个大文件。所以我觉得CStdioFile
也应该支持。
但是,在CStdioFile::GetLength()
大于 2GB 的文件上使用时,我得到一个CFileException
,下面是代码片段:
跟踪到 后CStdio::GetLength()
,我发现以下代码段会引发异常,如下所示:
令人惊奇的是CStdioFile
仍然使用ftell
而不是_ftelli64
来处理流。
然后我搜索文档CStdioFile
,我找不到任何文档CStdioFile::GetLength
,唯一相关的是https://docs.microsoft.com/en-us/cpp/mfc/reference/cstdiofile-class?view=vs-2019#seek,它要求我查看fseek
文件。但是在fseek
文档中,我仍然没有找到任何与文件大小限制相关的内容。
最后我找到一个第三方网站,指出CStdioFile::GetLength
包含错误:http://www.flounder.com/msdn_documentation_errors_and_omissions.htm#CStdioFile::GetLength,但它没有提供解决方案。
除此之外,几乎没有任何关于CStdioFile
在线 2GB 限制的问题或帖子。这真的很奇怪。
我尝试检查CStdioFile
iN VC++ 2017 的源代码,它与 2008 的源代码相同。
CStdioFile
那么是否有不重写整个类的简单解决方案呢?
file-io - ftell/fseek 在接近文件末尾时失败
读取文本文件(恰好是 PDS 成员 FB 80)
并且已经到达文件中只剩下一个空行的位置。
然后读取最后一行,它只包含一个'\n'
字符。
失败: -
指定的位置fseek()
由ftell()
几行之前返回。在我看到的特定错误情况下,它的值为 841。通过调试器检查,这也是ftell
前面几行返回的值。它没有被损坏。
相同的代码适用于文件中的其他位置,并且仅在记住该位置时剩下一个空行要读取的点处失败。
我对 SO的另一个答案简洁地理解了我对如何ftell
/应该工作的理解。fseek
从文本流上的 ftell 返回的值与您目前已阅读的字符数没有可预测的关系。您唯一可以依赖的是,您可以随后将其用作 fseek 或 fseeko 的偏移参数以移回相同的文件位置。
似乎我不能依赖我应该能够依赖的一件事。
我的问题是,为什么fseek
会以这种方式失败?
arrays - 无法将 ftell 函数的返回值分配给 char 数组大小
我正在尝试从分配内存最少的文件中打印一些值。我使用 ftell() 来查找文件,从而最大限度地减少使用的内存。我做了3种方法,其中一种是成功的。我不知道为什么另外 2 个不打印到字符串,因为它们似乎类似于成功的代码。
以下字符串位于我尝试输出的文件中
我的尝试:
成功的
失败:
输出:什么都没有打印出来
失败#2:
输出:一些垃圾
c - 使用C中的递归从txt文件反向打印
我需要使用递归在终端中向后写出 .txt 文件,但似乎我被卡住了。到目前为止,这是我的代码,但它创建了一个无限循环。此外,过程write()应该只有 1 个参数 - 指向文件的指针。
我想使用fseek和ftell函数,它们似乎是最好的方法。我的预期输出是:
文件
Hello world
输出
dlrow olleH
c - 使用文件函数反转文件中的字符
因此,使用 fseek 和 ftell 函数,我尝试一次打印一个字符,方法是首先使用 fseek 指向文件的末尾,然后递减 ftell 的值以打印最后一个字符,然后打印前一个字符。
我的代码正在打印一些奇怪的字符,所以它不起作用,关于我在 while 循环中哪里出错的任何建议?
c - ftell 返回不准确的值
所以,我在 c 中有这段代码,它应该从一个 ascii 文件中读取,然后返回一个被解析并编译成字节码的字符串。当我尝试使用 ftell 获取文件的大小时,它返回 33 而不是 29(文件包含新行的字节数)。
文件:
编码:
似乎无缘无故地又添加了四个字节。我的解析器抱怨“hlt====”不是一个有效的指令(“====”是 4 个额外的字节)。
Ftell 或 fseek 在这种情况下搞砸了,我不知道这是否是错误
我在 Windows 上,我也在使用 Visual Studio