zoukankan      html  css  js  c++  java
  • 视频监控---存储磁盘选择

    通常监控客户端会安装在系统盘上,但是如果将本地录像视频也保存在系统盘上,将可能很快占用光系统盘资源而导致系统无法正常运行。安装时可以考虑枚举各个磁盘,判断剩余空间大小,将剩余空间最大的盘作为录像存储磁盘。
    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);

  • 相关阅读:
    C# 实现任务栏图标程序
    C#实现的木马之客户端
    sql基本语法
    水晶报表引用DataSet做数据源
    解决多线程操作控件时可能出现的异常:“在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级”
    电子书籍制作工具软件大全
    C#实现的木马之服务端
    2进制、8进制、10进制、16进制...各种进制间的轻松转换
    VC# .Net中使用Crystal Report水晶报表
    P2P技术学习
  • 原文地址:https://www.cnblogs.com/ityujian/p/3192497.html
Copyright © 2011-2022 走看看