如何计算文件的大小(以字节为单位)?
#include <stdio.h>
unsigned int fsize(char* file){
//what goes here?
}
最佳答案
在类 Unix 系统上,您可以使用 POSIX 系统调用:stat
on a path , 或 fstat
已经打开的文件描述符(POSIX man page ,Linux man page )。
(从 open(2)
或 stdio 流上的 fileno(FILE*)
获取文件描述符)。
基于NilObject的代码:
#include <sys/stat.h>
#include <sys/types.h>
off_t fsize(const char *filename) {
struct stat st;
if (stat(filename, &st) == 0)
return st.st_size;
return -1;
}
变化:
- 将文件名参数设为
const char
。 - 更正了缺少变量名称的
struct stat
定义。 - 错误时返回
-1
而不是0
,这对于空文件来说是不明确的。off_t
是有符号类型,所以这是可能的。
如果你想让 fsize()
在出错时打印一条消息,你可以使用这个:
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
off_t fsize(const char *filename) {
struct stat st;
if (stat(filename, &st) == 0)
return st.st_size;
fprintf(stderr, "Cannot determine size of %s: %s\n",
filename, strerror(errno));
return -1;
}
在 32 位系统上,您应该使用选项 -D_FILE_OFFSET_BITS=64
进行编译,否则 off_t
最多只能保存 2 GB 的值。请参阅 Large File Support in Linux 的“使用 LFS”部分了解详情。
关于c - 你如何确定C中文件的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8236/