标题
    
    
        [linux/c/c++] linux下怎样得到文件的大小  [zt]
    
 
    
 	 
       
    
    clq
    
    
    
		
        浏览(0) + 
        2008-04-22 20:31:47 发表
        
编辑
         
        
        
        
        关键字: 
        
 
        
        
        
        
                
         linux下怎样得到文件的大小     
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}'"<    }
    
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     
  #include     
  #include     
   
  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 
#include 
  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);
      */
  
  }
        
        
        
        		
		        
                
                
     
    
 
	
	
     
	
    NEWBT官方QQ群1: 276678893
    可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
    但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
    验证问题说明申请入群原因即可.