织梦CMS - 轻松建站从此开始!

罗索

linux下怎样得到文件的大小

jackyhwei 发布于 2011-01-26 19:54 点击:次 
linux下怎样得到文件的大小?下面是四种方法(源码)。
TAG:

1.用SHELL来取得

  1. //得到已经使用的磁盘空间,以字节为单位    
  2. #ifdef _LINUX 
  3. sprintf(cmd, "cd %s;find . -name \"*.*
  4. \"|xargs ls -l|awk '{size+=$5}END{print size}'"
  5. str_FilePath.c_str()); 
  6. //sprintf(cmd, "du -s %s|awk '{print $1}'", str_FilePath.c_str()); 
  7. #endif 
  8.  
  9. if ((fp = popen(cmd, "r")) != NULL) 
  10. fgets(cmd, sizeof(cmd), fp); 
  11. else 
  12. LOG(NULL, 0, "SHELL ERROR:cd %s;find . -name \"*.*
  13. \"|xargs ls -l|awk '{size+=$5}END{print size}'"); 
  14. cout <<"SHELL ERROR:cd %s;find . -name \"*.*
  15. \"|xargs ls -l|awk '{size+=$5}END{print size}'"<<endl; 

2. fseek头再fseek尾相减

  1. unsigned long get_file_length( FILE* file_ptr )  
  2. {  
  3. unsigned long PosCur = 0;  
  4. unsigned long PosBegin = 0;  
  5. unsigned long PosEnd = 0;  
  6.  
  7. if ( NULL == file_ptr )  
  8. {  
  9. return 0;  
  10. }  
  11.  
  12. PosCur = ftell( file_ptr );//得到文件指针的当前位置 
  13. fseek( file_ptr, 0L, SEEK_SET );//将文件指针移到文件开始 
  14. PosBegin = ftell( file_ptr );//得到当前文件的位置,也就是文件头的位置 
  15. fseek( file_ptr, 0L, SEEK_END );//将文件指针移到文件末尾 
  16. PosEnd = ftell( file_ptr );//得到文件的末尾位置 
  17. fseek( file_ptr, PosCur, SEEK_SET );//将指针移到文件的原来位置 
  18.  
  19. return PosEnd - PosBegin;//返回文件大小 

3. 利用stat()来取得

  1. long get_file_size( char * filename )  
  2. struct stat f_stat;  
  3.  
  4. if( stat( filename, &f_stat ) == -1 ){  
  5. return -1;  
  6. }  
  7.  
  8. return (long)f_stat.st_size;  

下面是一个例子:

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <sys/stat.h>  
  4.  
  5. long get_file_size( char * filename )  
  6. {  
  7. struct stat f_stat;  
  8.  
  9. if( stat( filename, &f_stat ) == -1 ){  
  10. return -1;  
  11. }  
  12.  
  13. return (long)f_stat.st_size;  
  14. }  
  15.  
  16. int main(int argc, char *argv[])  
  17. {  
  18. if(argc == 1)  
  19. {  
  20. printf("%s size: %d\n", argv[0], get_file_size(argv[0]));  
  21. printf("usage: [%s] [filename]\n", argv[0]);  
  22. }  
  23. else  
  24. printf("%s size: %d", argv[1], get_file_size(argv[1]));  
  25. system("PAUSE");  
  26. return 0;  

4.利用函数filelength(int)很简单即可得到

  1. #include <io.h> 
  2. #include <fcntl.h> 
  3. int main(int argc, char *argv[])  
  4. int nFp = open("./test.txt", O_RDONLY); 
  5. int len = filelength(nFp); 
  6.   
  7. /* 
  8. //或者 
  9. FILE* fp; 
  10. fp = fopen("./test.txt", "r"); 
  11. int nFp = fileno(fp);//将文件描述符转为句柄 
  12. int len = filelength(nFp); 
  13. */ 

 

(bat603)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201101/10825.html]
本文出处:CSDN博客 作者:bat603
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容