c++ - 获取 C 中大文件的大小返回大小为 0

标签 c++ objective-c c

我在 Objective C 程序中创建了以下代码以获取目录中文件的大小,我必须在不使用任何 Objective-C 方法的情况下在 C 中执行此操作。这工作正常,并在用小文件检查时给出正确的大小。但是当涉及到大文件(用 7GB 文件测试)时,这个大小变量返回文件的大小为 0。谁能帮我解决这个问题?

//filePath is a string parameter which takes the path of the file
    FILE *fp=nil;
    const char  *filePathInToChar = [filePath UTF8String];
    fp = fopen(filePathInToChar, "rb");
    fseek(fp, 0, SEEK_END);
    long size = ftell(fp);

最佳答案

您的问题是 ftell 将文件流中的当前位置返回为 long int,在 32 位系统上通常最大值为 2^31 - 或 2GB换句话说。

您可以使用stat(这样您实际上不需要打开和关闭文件):

#include <sys/stat.h>

struct stat buf;
stat(filePathInToChar, &buf);
off_t size = buf.st_size;

off_t 应该是 long long,通常是 64 位。

关于c++ - 获取 C 中大文件的大小返回大小为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8675945/

相关文章:

ios - 如何通过网页链接打开appStore?

c - 打印结构字段多次只打印最后一个元素 - C

c++ - Internet Explorer 附加组件列表

c++ - 在 C++ 中创建模板时是否可以找到 sizeof(T)?

c++ - 如何将单个位写入bin文件

c++ - const 引用行为 - 为什么这个输出?

c - fgets() 不等待输入

c++ - 取消引用无效指针,然后获取结果的地址

objective-c - tvOS Preferredfocusedview 并不总是被调用

iphone - 如何使用 glRotatef() 和 glTranslatef() 在 3D 世界中增量移动