获取文件大小的六种方法

[cpp]  view plain copy
  1. bool FileHelper::GetAFileSize(const char *path,unsigned __int64& fileSize)  
  2. {  
  3.     if(!IsFileExsist(path))  
  4.     {  
  5.         return 0;  
  6.     }  
  7.   
  8.     //方案1,打开文件,获取文件大小  
  9.   
  10.     //HANDLE hFile = NULL;  
  11.     //unsigned long size_low = 0, size_high = 0, bytes_read = 0;  
  12.     //hFile = CreateFileA(path, GENERIC_READ, FILE_SHARE_READ,  
  13.     //    NULL, OPEN_EXISTING,0, NULL);  
  14.     //if(hFile == INVALID_HANDLE_VALUE)  
  15.     //{  
  16.     //    return false;  
  17.     //}  
  18.     //size_low = GetFileSize(hFile, &size_high);  
  19.     //SafeCloseFileHandle(hFile);  
  20.     //fileSize = (unsigned __int64)size_low | (((unsigned __int64)size_high) << 32);  
  21.     //return true;  
  22.   
  23.     //方案2,利用sys/stat.h中的stat结构体,不打开文件,获取到文件的大小  
  24.     //用到#include <sys/stat.h>   
  25.     //struct stat stat_buf;   
  26.     //if(stat(path, &stat_buf) < 0)  
  27.     //{  
  28.     //  fileSize = 0;  
  29.     //  return false;  
  30.     //}  
  31.     //fileSize = stat_buf.st_size;  
  32.     //return true;   
  33.   
  34.     //方案3,利用WIN32_FIND_DATA结构体,不打开文件,获取到文件的大小  
  35.     WIN32_FIND_DATA ffd ;  
  36.     HANDLE hFind = FindFirstFile(path,&ffd);  
  37.     if(hFind != INVALID_HANDLE_VALUE)  
  38.     {  
  39.         fileSize = (unsigned __int64)ffd.nFileSizeLow | (((unsigned __int64)ffd.nFileSizeHigh) << 32);  
[cpp]  view plain copy
  1. FindClose(hFind);//此处一定要记得关闭,不然文件一直会被占用。  
[cpp]  view plain copy
  1.         return true;  
  2.     }  
  3.     return false;  
  4.   
  5.     //方案4 用FILE  
  6.     //用到#include <io.h>   
  7.     FILE* file = fopen(path, "rb");    
  8.     if (file)    
  9.     {    
  10.         fileSize = filelength(fileno(file));    
  11.         fclose(file);    
  12.         return true;  
  13.     }  
  14.     return false;  
  15.   
  16.     方案5,以下是MFC的方法  
  17.     //CFile cfile;    
  18.     //if (cfile.Open(path, CFile::modeRead))    
  19.     //{    
  20.     //  fileSize = cfile.GetLength();    
  21.     //  return true;  
  22.     //}  
  23.     //return false;  
  24.   
  25.     方案6,不用打开文件获取文件大小  
  26.     //CFile cfile;    
  27.     //CFileStatus rStatus;  
  28.     //CFile::GetStatus(path,rStatus);  
  29.     //fileSize = rStatus.m_size;  
  30. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值