c - 你如何确定C中文件的大小?

标签 c file io filesize

如何计算文件的大小(以字节为单位)?

#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/

相关文章:

c++ - 循环未正确设置值

java - 从 File[] 文件到目录

java - 读入文件并存储到动态分配的字符串数组中

c - POSIX 保证写入磁盘

c++ - 使用fstream构造函数和open函数的区别

io - 有没有办法将 []byte slice 转换为 io.Reader?

代码没有显示任何 println arduino? (在每一种语言上)

c - GCC __attribute__ ((对齐 (8))) 不起作用

android - 如何使用 Qt 将文件写入 Android 设备?

c - 实现公平硬币翻转