确定大于 4GB 的文件的大小
当前代码执行此操作,并且 fgetpos 确实处理大于 4GB 的文件,但查找返回错误,因此任何想法如何查找 file > 的末尾都可以。 4GB?
fpos_t currentpos;
sok=fseek(fp,0,SEEK_END);
assert(sok==0,"Seek error!");
fgetpos(fp,¤tpos);
m_filesize=currentpos;
The code currently does this and the fgetpos does handle files larger than 4GB but the seek returns an error, so any idea how to seek to the end of a file > 4GB
?
fpos_t currentpos;
sok=fseek(fp,0,SEEK_END);
assert(sok==0,"Seek error!");
fgetpos(fp,¤tpos);
m_filesize=currentpos;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这段代码在 Linux 上适用于我:
This code works for me in Linux:
如果您使用的是 Windows,则需要 GetFileSizeEx (MSDN)< /a>. 返回值是一个 64 位 int。
在 Linux 上 stat64 (manpage) 是正确的。 fstat 如果您正在使用 FILE*。
If you're in Windows, you want GetFileSizeEx (MSDN). The return value is a 64bit int.
On linux stat64 (manpage) is correct. fstat if you're working with a FILE*.
忽略所有出现“64”的答案。 在 Linux 上,您应该将
-D_FILE_OFFSET_BITS=64
添加到 CFLAGS 并使用fseeko
和ftello
函数来获取/返回off_t< /code> 值而不是
long
。 它们不是 C 的一部分,而是 POSIX 的一部分。 其他(非 Linux)POSIX 系统可能需要不同的选项来确保off_t
是 64 位; 检查你的文档。Ignore all the answers with "64" appearing in them. On Linux, you should add
-D_FILE_OFFSET_BITS=64
to your CFLAGS and use thefseeko
andftello
functions which take/returnoff_t
values instead oflong
. These are not part of C but POSIX. Other (non-Linux) POSIX systems may need different options to ensure thatoff_t
is 64-bit; check your documentation.(盗自 glibc 手册)
int fgetpos64 (FILE *stream, fpos64_t *position)
该函数与 fgetpos 类似,但文件位置以
fpos64_t
类型的变量返回指向哪个位置。如果源代码在 32 位机器上使用
_FILE_OFFSET_BITS == 64
进行编译,则此函数可以在名称fgetpos
下使用,因此可以透明地替换旧接口。(stolen from the glibc manual)
int fgetpos64 (FILE *stream, fpos64_t *position)
This function is similar to fgetpos but the file position is returned in a variable of type
fpos64_t
to which position points.If the sources are compiled with
_FILE_OFFSET_BITS == 64
on a 32 bits machine this function is available under the namefgetpos
and so transparently replaces the old interface.Stat 在确定文件大小方面总是比 fseek 更好,对于非文件的内容它会安全地失败。
64 位文件大小是一个特定于操作的东西,在 gcc 上,您可以将“64”放在命令末尾,或者您可以强制它默认进行所有标准调用 64。 有关详细信息,请参阅编译器手册。
Stat is always better than fseek to determine file size, it will fail safely on things that aren't a file.
64 bit filesizes is an operating specific thing, on gcc you can put "64" on the end of the commands, or you can force it to make all the standard calls 64 by default. See your compiler manual for details.
至少在 Linux 上,您可以使用 lseek64 而不是 fseek。
On linux, at least, you could use lseek64 instead of fseek.