我在 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/