您的位置:首页 > 其它

比较文件和磁盘剩余空间大小

2013-03-12 19:25 253 查看
//遍历文件夹函数

DWORD64 GetFolderSize(LPCTSTR lpPath)

{

DWORD64 dwSize = 0;

TCHAR szFind[MAX_PATH] = {_T("\0")};

WIN32_FIND_DATA findFileData;

BOOL bRet;

_tcscpy_s(szFind, MAX_PATH, lpPath);

_tcscat_s(szFind, _T("\\*.*")); //这里一定要指明通配符,不然不会读取所有文件和目录

HANDLE hFind = ::FindFirstFile(szFind, &findFileData);

if (INVALID_HANDLE_VALUE == hFind)

{

return 0;

}

//遍历文件夹

while (TRUE)

{

if (findFileData.cFileName[0] != _T('.'))

{//不是当前路径或者父目录的快捷方式

_tprintf(_T("%s\\%s\n"), lpPath, findFileData.cFileName);

if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

{//这是一个普通目录

//设置下一个将要扫描的文件夹路径

_tcscpy_s(szFind, MAX_PATH, lpPath);

_tcscat_s(szFind, _T("\\"));

_tcscat_s(szFind, findFileData.cFileName);

//遍历该目录

dwSize += GetFolderSize(szFind);

}

}

//如果是当前路径或者父目录的快捷方式,或者是普通目录,则寻找下一个目录或者文件

dwSize += findFileData.nFileSizeLow;

bRet = ::FindNextFile(hFind, &findFileData);

if (!bRet)

{

break;

}

}

::FindClose(hFind);

return dwSize;

}

BOOL CABCToolDlg::CheckDiskSpace(CHAR cDiskLable, CString csPcFilePath)

{

// 判断磁盘空间是否大于文件大小

CString csDisk;

csDisk.Format("%c", cDiskLable);

csDisk += ":";

ULARGE_INTEGER pDiskUserAvalibleSpace;

ULARGE_INTEGER pDiskTotalSpace;

ULARGE_INTEGER pDiskRemainSpace;

CString csErrorOfDiskSpace = csDisk;

if(GetDiskFreeSpaceEx((LPCTSTR)csDisk, &pDiskUserAvalibleSpace, &pDiskTotalSpace, &pDiskRemainSpace))

{

DWORD64 nFileSize = GetFolderSize(csPcFilePath);

if (pDiskUserAvalibleSpace.QuadPart < nFileSize)

{

csErrorOfDiskSpace += "盘剩余空间小于拷贝的文件大小!";

AfxMessageBox(csErrorOfDiskSpace);

return FALSE;

}

}

else

{

csErrorOfDiskSpace += "剩余空间获取失败!";

AfxMessageBox(csErrorOfDiskSpace);

return FALSE;

}

return TRUE;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: