linux下怎样得到文件的大小

本文介绍了多种获取文件大小的方法,包括使用shell命令统计目录下所有文件的总大小、通过C/C++函数直接获取单个文件的长度及利用系统调用获取文件大小等。这些方法适用于不同场景下的文件尺寸测量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.SHELL
    //得到已经使用的磁盘空间,以字节为单位   
#ifdef _LINUX
    sprintf(cmd, "cd %s;find . -name /"*.*/"|xargs ls -l|awk '{size+=$5}END{print size}'",
            str_FilePath.c_str());
    //sprintf(cmd, "du -s %s|awk '{print $1}'", str_FilePath.c_str());
#endif

    if ((fp = popen(cmd, "r")) != NULL)
          {
                fgets(cmd, sizeof(cmd), fp);
          }
    else
    {
        LOG(NULL, 0, "SHELL ERROR:cd %s;find . -name /"*.*/"|xargs ls -l|awk '{size+=$5}END{print size}'");
        cout <<"SHELL ERROR:cd %s;find . -name /"*.*/"|xargs ls -l|awk '{size+=$5}END{print size}'"<<endl;
    }
   
2.

unsigned   long   get_file_length(   FILE*   file_ptr   ) 
  { 
          unsigned   long   PosCur                 =   0; 
          unsigned   long   PosBegin             =   0; 
          unsigned   long   PosEnd                 =   0; 
          
          if   (   NULL   ==   file_ptr   ) 
          { 
                  return   0; 
          } 
          
          PosCur   =   ftell(   file_ptr   );  //得到文件指针的当前位置
          fseek(   file_ptr,   0L,   SEEK_SET   );  //将文件指针移到文件开始
          PosBegin   =   ftell(   file_ptr   );  //得到当前文件的位置,也就是文件头的位置
          fseek(   file_ptr,   0L,   SEEK_END   );  //将文件指针移到文件末尾
          PosEnd   =   ftell(   file_ptr   );  //得到文件的末尾位置
          fseek(   file_ptr,   PosCur,   SEEK_SET   );  //将指针移到文件的原来位置
  
          return   PosEnd   -   PosBegin;          //返回文件大小
  }
 
 3.
 long   
  get_file_size(   char   *   filename   )   
  {   
          struct   stat   f_stat;   
  
          if(   stat(   filename,   &f_stat   )   ==   -1   ){   
                  return   -1;   
          }   
  
          return   (long)f_stat.st_size;   
  } 
    下面是一个例子: 
  ----------------------------------------------------------------- 
  #include   <stdio.h> 
  #include   <stdlib.h> 
  #include   <sys/stat.h> 
  
  long   
  get_file_size(   char   *   filename   )   
  {   
          struct   stat   f_stat;   
  
          if(   stat(   filename,   &f_stat   )   ==   -1   ){   
                  return   -1;   
          }   
  
          return   (long)f_stat.st_size;   
  } 
  
  
  int   main(int   argc,   char   *argv[]) 
  { 
          if(argc   ==   1) 
          { 
                  printf("%s   size:   %d/n",   argv[0],   get_file_size(argv[0])); 
                  printf("usage:   [%s]   [filename]/n",   argv[0]); 
          }         
          
          else 
                  printf("%s   size:   %d",   argv[1],   get_file_size(argv[1]));             
      system("PAUSE"); 
      return   0; 
  }
 
  4.
  利用函数filelength(int)很简单即可得到
  #include <io.h>
#include <fcntl.h>
  int   main(int   argc,   char   *argv[]) 
  {
      int nFp = open("./test.txt", O_RDONLY);
      int len = filelength(nFp);
     
      /*
      //或者
      FILE* fp;
      fp = fopen("./test.txt", "r");
      int nFp = fileno(fp);//将文件描述符转为句柄
      int len = filelength(nFp);
      */
 
  }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值