通常监控客户端会安装在系统盘上,但是如果将本地录像视频也保存在系统盘上,将可能很快占用光系统盘资源而导致系统无法正常运行。安装时可以考虑枚举各个磁盘,判断剩余空间大小,将剩余空间最大的盘作为录像存储磁盘。
1. 利用GetLogicalDriveStrings列出所有盘符,如: c:\  d:\ 各个盘符之间会用null隔开。


TCHAR  szDiskArray[1024 + 1] = {0};       
DWORD dwRet = GetLogicalDriveStrings(1024, szDiskArray);

2. 用GetDriveType获取各个盘符的属性,是否硬盘分区,是否光驱,是否内存盘

#define DRIVE_UNKNOWN     0      
#define DRIVE_NO_ROOT_DIR 1       
#define DRIVE_REMOVABLE   2       
#define DRIVE_FIXED       3       
#define DRIVE_REMOTE      4       
#define DRIVE_CDROM       5       
#define DRIVE_RAMDISK     6


只有属性为DRIVE_FIXED的才是本地磁盘分区,只是用它做比较。

  

UINT type = GetDriveType((*iter).c_str());      
    switch(type) {       
        case DRIVE_FIXED: {                …      
            }       
            break;       
        default:    }


3. 使用变量保存数据存储所在盘符 szStoreDisk(初始化为空串),以及剩余空间大小dwFreeStoreSize(初始化为0)

4. 使用GetDiskFreeSpaceEx()获取磁盘的剩余空间,依次用DRIVE_FIXED类型的盘符上的剩余空间和dwFreeStoreSize做比较,如果比dwFreeStoreSize大,则将当前比较盘符上的剩余空间赋值给dwFreeStoreSize,同时保存该盘符。

INT64    i64FreeBytesToCaller;      
INT64    i64TotalBytes;       
INT64    i64FreeBytes;       
BOOL bRet = GetDiskFreeSpaceEx((*iter).c_str(),  
         (PULARGE_INTEGER)&i64FreeBytesToCaller,       
         (PULARGE_INTEGER)&i64TotalBytes,       
         (PULARGE_INTEGER)&i64FreeBytes);