两种方式获取文件大小
INT64 MyGetFileSize(const CString& strFilePath)
{//获取文件大小INT64 nLen = 0;WIN32_FILE_ATTRIBUTE_DATA attr = { 0 }; //文件属性结构体if (FALSE == GetFileAttributesEx(strFilePath, GetFileExInfoStandard, &attr)) //获取文件属性{//获取文件大小失败}else{nLen = (ULONGLONG(attr.nFileSizeHigh) << 32) | ((attr.nFileSizeLow) & 0xFFFFFFFF);}return nLen;
}
获取目录大小
LONGLONG FileSize(CString file) const noexcept
{HANDLE fp = CreateFile(file.GetBuffer(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);LARGE_INTEGER info;memset(&info, 0, sizeof(info));GetFileSizeEx(fp, &info);return info.QuadPart;
}
LONGLONG DirectorySize(CString path) const noexcept
{__int64 size = 0;WIN32_FIND_DATA fd;memset(&fd, 0, sizeof(fd));::SetCurrentDirectory(path.GetBuffer()); // 设置当前的工作路径HANDLE hd = ::FindFirstFile(_T("*.*"), &fd); // 查找任意文件if (hd != INVALID_HANDLE_VALUE) { // 如果不是一个空的文件夹do{if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // 枚举到的第一个文件是不是文件夹CString name = fd.cFileName;if (name != _T(".") && name != _T("..")) { // 如果不是系统文件夹size += DirectorySize(fd.cFileName);::SetCurrentDirectory(_T(".."));}}else {size += FileSize(fd.cFileName);}} while (FindNextFile(hd, &fd));::FindClose(hd);}return size;
}