zoukankan      html  css  js  c++  java
  • 检测逻辑驱动器

           主要用到的API有GetLogicalDrives ,GetLogicalDirveStrings, GetDriveType, GetDiskFreeSpace.分别介绍如下:

    1.  DWORD GetLogicalDrives(void)
         此函数没有参数,它的返回值是一个掩码,用来描述当前可用的逻辑驱动器。第0位代表驱动器A,第一位代表驱动器B,,第2位代表驱动器C,依次类推。若某一位为1,则说明该位所对应的驱动器可用,为0则相反。

    2 . DWORD GetLogicalDriveStrings(
                            DWORD nBufferLength,  // 下面lpBuffer所指向的缓冲区大小
                            LPTSTR  lpBuffer )            //  驱动器名缓冲区,其存储格式为"A:\",0,"B:\",0,"C:\",0,....,0,0

    3. UINT     GetDriveType( LPCTSTR  lpRootPathName)  // 要检测的逻辑驱动器的根目录
        返回值为:
      DRIVE_UNKOWN                   无法识别该驱动器
            DRIVE_REMOVABLE             可移动磁盘
            DRIVE_CDROM                       光盘
            DRIVE_FIXED                          固定磁盘
            等。

    4. BOOL GetDiskFreeSpace(
             LPCTSTR             lpRootPathName,                 //  要检测的磁盘驱动器如"c:\"
             LPDWORD           lpSectionsPerCluster,         //  每一簇的扇区数
             LPDWORD           lpBytesPerSector,                 //  每一扇区的字节数
             LPDWORD           lpNumberOfFreeClusters,  //  空闲簇数
             LPDWORD           lpTotalNumberOfClusters)  //  总共簇数
    驱动器总容量的计算:簇总数 x  每簇的扇区数 x 每扇区的字节数
    驱动器空闲容量计算:空闲簇数 x  每簇的扇区数 x 每扇区的字节数

    例:

     char lpBuffer[1024];
     ::GetLogicalDriveStrings(1024, lpBuffer);
     
     int nDrivers = 0;
     while(*(lpBuffer + nDrivers * 4) != 0)
     {
      cout<<lpBuffer+nDrivers * 4 ;
      UINT nType = ::GetDriveType(lpBuffer + nDrivers*4);
      if(nType == DRIVE_UNKNOWN)
      {
       cout<<"\tUNKNOWN\t";
      }else if(nType == DRIVE_REMOVABLE)
      {
       cout<<"\tREMOVABLE\t";
      }else if(nType == DRIVE_FIXED)
      {
       cout<<"\tFIXED\t";
      }else if(nType == DRIVE_CDROM)
      {
       cout<<"\tCDROM\t";
      }

      DWORD dwSectionsPerCluster;   // 每一簇的扇区数
      DWORD dwBytesPerSector;       // 每一扇区的字节数
      DWORD dwNumberOfFreeClusters;  // 可用的簇数
      DWORD dwTotalNumberOfClusters; // 总簇数
      // 驱动器总容量计算公式 :  簇总数 x 每簇扇区数 x 每扇区的字节数
      // 驱动器空闲容量计算公式: 未使用的簇 x 每簇扇区数 x 每扇区的字节数

      GetDiskFreeSpace(lpBuffer + nDrivers * 4 ,
       &dwSectionsPerCluster,
       &dwBytesPerSector,
       &dwNumberOfFreeClusters,
       &dwTotalNumberOfClusters);

      double free,total;
      total = double(dwTotalNumberOfClusters) * double(dwSectionsPerCluster) * double(dwBytesPerSector);
      free  = double(dwNumberOfFreeClusters)  * double(dwSectionsPerCluster) * double(dwBytesPerSector);
      cout<<total/1024<<"K\t";
      cout<<free/1024<<"K";

      cout<<endl;

      nDrivers ++;
     }

  • 相关阅读:
    Django 06模板语言的复用
    Django 07模型层—单表操作
    Django 05模板-变量、过滤器、 标签
    Django 04(视图层基础01)
    Django 03 (路由层基础)
    Django--02(项目创建,数据请求迁移,单表orm增删改查)
    Web 文本、reset操作、高级选择器、边界圆角、a的四大伪类、精灵图
    web前端 基础选择器、长度与颜色、display、嵌套、盒模型
    MySQL之数据库的常用语句
    PHP中级篇 Apache配置httpd-vhosts虚拟主机总结及注意事项(转载)
  • 原文地址:https://www.cnblogs.com/mywolrd/p/1930724.html
Copyright © 2011-2022 走看看