- bool FileHelper::GetAFileSize(const char *path,unsigned __int64& fileSize)
- {
- if(!IsFileExsist(path))
- {
- return 0;
- }
- //方案1,打开文件,获取文件大小
- //HANDLE hFile = NULL;
- //unsigned long size_low = 0, size_high = 0, bytes_read = 0;
- //hFile = CreateFileA(path, GENERIC_READ, FILE_SHARE_READ,
- // NULL, OPEN_EXISTING,0, NULL);
- //if(hFile == INVALID_HANDLE_VALUE)
- //{
- // return false;
- //}
- //size_low = GetFileSize(hFile, &size_high);
- //SafeCloseFileHandle(hFile);
- //fileSize = (unsigned __int64)size_low | (((unsigned __int64)size_high) << 32);
- //return true;
- //方案2,利用sys/stat.h中的stat结构体,不打开文件,获取到文件的大小
- //用到#include <sys/stat.h>
- //struct stat stat_buf;
- //if(stat(path, &stat_buf) < 0)
- //{
- // fileSize = 0;
- // return false;
- //}
- //fileSize = stat_buf.st_size;
- //return true;
- //方案3,利用WIN32_FIND_DATA结构体,不打开文件,获取到文件的大小
- WIN32_FIND_DATA ffd ;
- HANDLE hFind = FindFirstFile(path,&ffd);
- if(hFind != INVALID_HANDLE_VALUE)
- {
- fileSize = (unsigned __int64)ffd.nFileSizeLow | (((unsigned __int64)ffd.nFileSizeHigh) << 32);
- FindClose(hFind);//此处一定要记得关闭,不然文件一直会被占用。
- return true;
- }
- return false;
- //方案4 用FILE
- //用到#include <io.h>
- FILE* file = fopen(path, "rb");
- if (file)
- {
- fileSize = filelength(fileno(file));
- fclose(file);
- return true;
- }
- return false;
- 方案5,以下是MFC的方法
- //CFile cfile;
- //if (cfile.Open(path, CFile::modeRead))
- //{
- // fileSize = cfile.GetLength();
- // return true;
- //}
- //return false;
- 方案6,不用打开文件获取文件大小
- //CFile cfile;
- //CFileStatus rStatus;
- //CFile::GetStatus(path,rStatus);
- //fileSize = rStatus.m_size;
- }