获取文件大小这里有两种方法:

方法一、

范例:

  1. unsigned long get_file_size(const char *path)
  2. {
  3. unsigned long filesize = -1;
  4. FILE *fp;
  5. fp = fopen(path, "r");
  6. if(fp == NULL)
  7. return filesize;
  8. fseek(fp, 0L, SEEK_END);
  9. filesize = ftell(fp);
  10. fclose(fp);
  11. return filesize;
  12. }

此种以打开文件的方法取得文件的大小,不适合大文件,并且可能会出现访问冲突(比如正在下载的文件),效率也比较低

方法二、

范例:

  1. #include <sys/stat.h>
  2. unsigned long get_file_size(const char *path)
  3. {
  4. unsigned long filesize = -1;
  5. struct stat statbuff;
  6. if(stat(path, &statbuff) < 0){
  7. return filesize;
  8. }else{
  9. filesize = statbuff.st_size;
  10. }
  11. return filesize;
  12. }

此种使用读取文件属性的方法得到文件的大小,效率较高,也较稳定

下面将stat的详细信息粘贴出来:

stat(取得文件状态)     
相关函数     fstat,lstat,chmod,chown,readlink,utime 
  
表头文件     #include <sys/stat.h> 
#include <unistd.h> 
  
定义函数     int   stat(const   char   *   file_name,struct   stat   *buf); 
  
函数说明     stat()用来将参数file_name所指的文件状态,复制到参数buf所指的结构中。 
下面是struct   stat内各参数的说明 
struct   stat 

dev_t   st_dev;   /*device*/ 
ino_t   st_ino;   /*inode*/ 
mode_t   st_mode;   /*protection*/ 
nlink_t   st_nlink;   /*number   of   hard   links   */ 
uid_t   st_uid;   /*user   ID   of   owner*/ 
gid_t   st_gid;   /*group   ID   of   owner*/ 
dev_t   st_rdev;   /*device   type   */ 
off_t   st_size;   /*total   size,   in   bytes*/ 
unsigned   long   st_blksize;   /*blocksize   for   filesystem   I/O   */ 
unsigned   long   st_blocks;   /*number   of   blocks   allocated*/ 
time_t   st_atime;   /*   time   of   lastaccess*/ 
time_t   st_mtime;   /*   time   of   last   modification   */ 
time_t   st_ctime;   /*   time   of   last   change   */ 
}; 
st_dev   文件的设备编号 
st_ino   文件的i-node 
st_mode   文件的类型和存取的权限 
st_nlink   连到该文件的硬连接数目,刚建立的文件值为1。 
st_uid   文件所有者的用户识别码 
st_gid   文件所有者的组识别码 
st_rdev   若此文件为装置设备文件,则为其设备编号 
st_size   文件大小,以字节计算 
st_blksize   文件系统的I/O   缓冲区大小。 
st_blcoks   占用文件区块的个数,每一区块大小为512   个字节。 
st_atime   文件最近一次被存取或被执行的时间,一般只有在用mknod、utime、read、write与tructate时改变。 
st_mtime   文件最后一次被修改的时间,一般只有在用mknod、utime和write时才会改变 
st_ctime   i-node最近一次被更改的时间,此参数会在文件所有者、组、权限被更改时更新先前所描述的st_mode   则定义了下列数种情况 
S_IFMT   0170000   文件类型的位遮罩 
S_IFSOCK   0140000   scoket 
S_IFLNK   0120000   符号连接 
S_IFREG   0100000   一般文件 
S_IFBLK   0060000   区块装置 
S_IFDIR   0040000   目录 
S_IFCHR   0020000   字符装置 
S_IFIFO   0010000   先进先出 
S_ISUID   04000   文件的(set   user-id   on   execution)位 
S_ISGID   02000   文件的(set   group-id   on   execution)位 
S_ISVTX   01000   文件的sticky位 
S_IRUSR(S_IREAD)   00400   文件所有者具可读取权限 
S_IWUSR(S_IWRITE)00200   文件所有者具可写入权限 
S_IXUSR(S_IEXEC)   00100   文件所有者具可执行权限 
S_IRGRP   00040   用户组具可读取权限 
S_IWGRP   00020   用户组具可写入权限 
S_IXGRP   00010   用户组具可执行权限 
S_IROTH   00004   其他用户具可读取权限 
S_IWOTH   00002   其他用户具可写入权限 
S_IXOTH   00001   其他用户具可执行权限 
上述的文件类型在POSIX   中定义了检查这些类型的宏定义 
S_ISLNK   (st_mode)   判断是否为符号连接 
S_ISREG   (st_mode)   是否为一般文件 
S_ISDIR   (st_mode)是否为目录 
S_ISCHR   (st_mode)是否为字符装置文件 
S_ISBLK   (s3e)   是否为先进先出 
S_ISSOCK   (st_mode)   是否为socket 
若一目录具有sticky   位(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或root来删除或改名。 
  
返回值     执行成功则返回0,失败返回-1,错误代码存于errno 
  
错误代码     ENOENT   参数file_name指定的文件不存在 
ENOTDIR   路径中的目录存在但却非真正的目录 
ELOOP   欲打开的文件有过多符号连接问题,上限为16符号连接 
EFAULT   参数buf为无效指针,指向无法存在的内存空间 
EACCESS   存取文件时被拒绝 
ENOMEM   核心内存不足 
ENAMETOOLONG   参数file_name的路径名称太长 
  
范例     #include <sys/stat.h> 
#include <unistd.h> 
mian() 

struct   stat   buf; 
stat   (“/etc/passwd”,&buf); 
printf(“/etc/passwd   file   size   =   %d   /n”,buf.st_size); 

  
执行     /etc/passwd   file   size   =   705

linux下C获取文件的大小的更多相关文章

  1. Linux C 获取 文件的大小

    通过Linux C库函数来获取文件的大小 #include <unistd.h> #include <sys/types.h> #include <sys/stat.h& ...

  2. Linux下几种文件传输命令

    Linux下几种文件传输命令 sz rz sftp scp 最近在部署系统时接触了一些文件传输命令,分别做一下简单记录: 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具 ...

  3. Linux下java获取CPU、内存、磁盘IO、网络带宽使用率

    一.CPU 使用proc文件系统,"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口.用户和应用程序可以通过proc得 ...

  4. Linux下校验下载文件的完整性(MD5,SHA1,PGP)

    查看: Linux下校验下载文件的完整性(MD5,SHA1,PGP) http://blog.useasp.net/archive/2014/03/29/use-md5-sha1-or-pgp-to- ...

  5. Linux中查看各文件夹大小(扫盘)

    df -h ./ du -hs ./ du -h /ifs4/BC_RD/USER/lizhixin/my_project/human_chr22 | grep [[:digit:]+]G du [- ...

  6. Linux中查看各文件夹大小命令:du -h --max-depth=1

    Linux中查看各文件夹大小命令:du -h --max-depth=1 du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-siz ...

  7. Linux下打开超大文件的方法

    Linux下打开超大文件方法 在Linux下用VIM打开大小几个G.甚至几十个G的文件时,是非常慢的. 这时,我们可以利用下面的方法分割文件,然后再打开. 1 查看文件的前多少行 head -1000 ...

  8. 用脚本如何实现将Linux下的txt文件批量转化为Windows下的txt文件?

    众所周知,Windows和Linux的文件换行回车格式不同,Windows下换行格式是\r\n(回车+换行),Linux下换行格式为\n(只是换行),因此,其中一个操作系统的文本文件若需要在另外一个中 ...

  9. 【Linux学习】Linux下用户组、文件权限详解

    原文地址:http://www.cnblogs.com/123-/p/4189072.html Linux下用户组.文件权限详解 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在li ...

随机推荐

  1. qt 串口

    if(ui->connectSerialBtn->text() == tr("打开串口")) { //ui->showSerialInfo->setEnab ...

  2. Bootstrap3基础 引入本地的bootstrap

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  3. bzoj 3513: [MUTC2013]idiots FFT

    bzoj 3513: [MUTC2013]idiots FFT 链接 bzoj 思路 参考了学姐TRTTG的题解 统计合法方案,最后除以总方案. 合法方案要不好统计,统计不合法方案. \(a+b< ...

  4. 【BUAA-OO】第一单元作业总结

    #OO第一单元作业总结 #确认存活,爱学习,爱北航,爱OO 一.三次作业分析 1.第一次作业 1.1 程序结构 对方法的度量: 类的内聚和相互间的耦合情况: 类图: 优缺点: 优点大概没什么优点,毕竟 ...

  5. GeoJson

    几何对象.特征对象.特征对象集合.

  6. pytest--fixture参数化的实现方式和执行顺序

    之前看到fixture函数可以通过添加,params参数来实现参数化,后续看到了悠悠 的博客,可以通过@pytest.mark.parametrize来实现,现在做一个总结 实现方式一 通过param ...

  7. Ctrl+Alt+Down/Up 按键冲突

    I mapped Ctrl-Alt-Up/Down to open web-browser and email client but it didn't take effect. Ctrl-Alt-U ...

  8. 【转载】Linux常用命令

    Linux常用命令大全(非常全!!!) 转载出处:https://www.cnblogs.com/yjd_hycf_space/p/7730690.html 系统信息 arch 显示机器的处理器架构( ...

  9. 弹筐里同一个按钮判断是从哪里点击过来的form

    点击弹框按钮 <form action="javascript:;" method="post">         <button type= ...

  10. Android中控件之间添加分割线

    将以下view标签放置在需要分割的两个控件之间: <View android:layout_width=”match_parent” android:layout_height=”1dp” an ...