1,目的
有时候我们需要让用户设置我们软件的安装目录或其他路径等,以前windows的软件经常提供的默认安装路径在 C:\Programs中,可其实为节约系统盘,很多人是选择其他盘符作为安装目录的。
我们这里可以自动找到最为空闲的磁盘,提示给用户,或直接把默认路径设在该盘。
2,原理
根据【磁盘处理相关方法】1、2,介绍的枚举磁盘、求磁盘大小等方法,这里就很容易实现。
相关文章地址:
3,实现
WCHAR GetFreestDisk()
{
WCHAR wcFreestDisk = L'A';
FLOAT fFreestSpace = 0.f;
//得到有哪些逻辑驱动器
DWORD dwDrivers = GetLogicalDrives();
WCHAR wc = L'A';
for (int i = 0 ; i<26 ; i++)
{
//判断当前位是否有驱动器
if ((dwDrivers & (1<<i))!=0)
{
WCHAR wcDisk = L'A' + i;
FLOAT fSpace = GetDiskFreeSpaceAsGB(wcDisk);
if (fFreestSpace < fSpace)
{
fFreestSpace = fSpace;
wcFreestDisk = wcDisk;
}
}
}
return wcFreestDisk;
}
其中GetDiskFreeSpaceAsGB 是第2篇介绍的方法:
FLOAT DiskHelper::GetDiskFreeSpaceAsGB(WCHAR cDiskName)
{
FLOAT fFreeSpaceAsGB = 0.0f;
ULARGE_INTEGER uiFreeBytesAvailableToCaller;
ULARGE_INTEGER uiTotalNumberOfBytes;
ULARGE_INTEGER uiTotalNumberOfFreeBytes;
WCHAR szPath[2] = {0};
wcscat(szPath,cDiskName);
wcscat(szPath,L":");
if(GetDiskFreeSpaceExW(szPath,
&uiFreeBytesAvailableToCaller,
&uiTotalNumberOfBytes,
&uiTotalNumberOfFreeBytes))
{
fFreeSpaceAsGB = (FLOAT)((LONGLONG)(uiFreeBytesAvailableToCaller.QuadPart)/1024.0f/1024.0f/1024.f);
}
return fFreeSpaceAsGB;
}