比较文件和磁盘剩余空间大小
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;
}
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;
}
相关文章推荐
- 比较要拷贝的文件大小和磁盘的剩余空间大小
- linux查看磁盘剩余空间和文件大小
- ORACLE ASM中查询表空间使用情况、数据文件路径、裸设备磁盘总大小剩余大小
- Linux:centos释放缓存,查看磁盘空间大小,xxx文件夹, 查看文件夹大小,查看剩余内存,查看xxx软件位置,统计某文件夹,统计某文件夹下目录数量,查看文件夹大小,给文件夹下所有的文件赋值权限
- Ubuntu 查看文件以及磁盘空间大小管理
- 根据文件路径获取剩余磁盘空间
- Oracle查询表空间的使用情况和数据文件是否拓展及剩余可拓展大小
- linux下查看磁盘剩余空间和文件夹大小
- 检查磁盘剩余空间大小
- linux下使用 du查看某个文件或目录占用磁盘空间的大小方法
- linux下使用 du查看某个文件或目录占用磁盘空间的大小
- 根据文件路径获取剩余磁盘空间
- 获取磁盘剩余空间 Django项目几个主要文件功能的解释
- Sqlserver查询数据库文件大小和剩余空间
- Ubuntu 查看文件以及磁盘空间大小管理
- du:统计目录(或文件)所占磁盘空间的大小
- Linux下查看磁盘剩余空间和文件夹大小
- MS Sql Server查询磁盘的可用空间,数据库数据文件及日志文件的大小及利用率
- 手把手教你:调节磁盘空间大小、隐藏你的文件磁盘
- mac 系统磁盘大小不正确!删除文件,磁盘空间不变。