技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Linux --> linux下获取文件大小

linux下获取文件大小

浏览:2843次  出处信息

前几天在工作中需要写一段代码,获取一些文件的大小,心想:这还不简单吗?直接用标准C 的文件操作函数就OK了。于是写了下面的一段代码来实现:

unsigned long get_file_size(const char *filename)
{
    unsigned long size;
    FILE* fp = fopen( filename, “rb” );
    if(fp==NULL)
    {
        printf(“ERROR: Open file %s failed.\n”, filename);
        return 0;
    }
    fseek( fp, SEEK_SET, SEEK_END );
    size=ftell(fp);
    fclose(fp);
    return size;
}

没有想到的是,在程序执行后发现有的文件能正确的获取大小,而有的文件则不能正确的获取到文件大小,检查了代码,也没有发现有什么不对的地方。但是在这过程中发现了一个问题,就是能正确获取大小的文件都是相对比较小的文件,而出现错误的都是很大的文件。于是想到会不会是因为标准C文件操作函数对超过一定大小的文件不支持所造成的呢,于是Google了一下,没想到我的猜测是正确的,标准C的文件操作函数不支持对超过2G的文件读取。

问题找到了,看来只有换一种方法来实现了,因为平时很少用到标准C的一些函数,所以,又只有求助了,在看了网上不少的参考文章之后,发现调用stat函数可以正确的得到超大文件的状态信息(当然包括文件大小),于是最终实现了如下的代码:

unsigned long get_file_size(const char *filename)
{
    struct stat buf;
    if(stat(filename, &buf)<0)
    {
        return 0;
    }
    return (unsigned long)buf.st_size;
}

从写这么一个小小功能的函数可以看出,平时多积累一些计算机方面的知识真的是很重要的,同时对代码的全面测试也是相当重要的,否则,看着很正确的代码可能在某些情况下会给你带来意想不到的麻烦。

建议继续学习:

  1. 海量小文件存储    (阅读:7558)
  2. 其实,文件也可以truncate    (阅读:7397)
  3. 关于Linux的文件系统cache    (阅读:4791)
  4. Perl 倒行分析文件方法。perl读文本文件,从末尾往前读.    (阅读:4439)
  5. 修改系统最大文件句柄数    (阅读:4279)
  6. PHP:从一个大文件第N行开始读取M行    (阅读:3941)
  7. linux file命令是如何识别文件的类型的    (阅读:3937)
  8. C/C++循环获取文件中的每行数据(别以为很简单!)    (阅读:3877)
  9. 打开多个文件:linux ulimit max open files    (阅读:3555)
  10. shell文件存在相关判断参数    (阅读:3555)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
  • 作者:Dante    来源: Vimer
  • 标签: 文件
  • 发布时间:2009-12-18 09:32:25
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1