您的位置:首页 > 其它

获取文件大小的方式

2014-04-04 09:56 253 查看
最初是这样

ULONGLONG llFileSize = 0;
CFile file;
BOOL bOpen = file.Open(strFullPath, CFile::modeRead);
if (bOpen)
{
llFileSize = file.GetLength();
file.Close();
}


因为业务需求,文件大小不是必要的,所以采用这种方式而不是报错。

后来发现经常有大小是0的情况,调式发现bOpen为FALSE,瞬间想到了系统中的某些模块正在独占这些文件,造成读方式打开文件失败。仔细想想,文件大小是文件的基本属性,无论文件是否被占用,文件大小操作系统使用会知道。所以查了下资料,改为以下:
ULONGLONG NMGetFileSize(CString strFileFullPath)
{
WIN32_FIND_DATA fileInfo;
HANDLE hFind = FindFirstFile(strFileFullPath,&fileInfo);
if(hFind == INVALID_HANDLE_VALUE)
return FALSE;
LARGE_INTEGER li;
li.LowPart = fileInfo.nFileSizeLow;
li.HighPart = fileInfo.nFileSizeHigh;
FindClose(hFind);
return li.QuadPart;
}这里要注意WIN32_FIND_DATA结构分为SizeLow&SizeHigh,将两块内存组合起来才是真正的文件大小。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: