这里的磁盘就是你的C,D,E,F,G盘啦

那么来看看吧windows Api来获取信息的呢
(1)DWORD GetLogicalDrives(void)
返回值是一个32位整形
32位每一位表示一个对应的驱动器是否存在,第2位是1表示B:存在。。
(2)DWORD GetLogicalDriveStrings(DWORD nBufferLength,LPTSTR lpBuffer);
nBufferLength:指向内存的大小(简单来说就多少个CHAR)
lpBuffer:存储返回结果字符串的内存空间(简单来说CHAR的位置)
返回值:表示是否成功,成功返回缓冲区中返回结果的总长度.如果返回值大于第一个参数表示设置的缓冲区大小不够,返回0表示出错
例子
CHAR szLogicalDriveStrings[BUFSIZE];
PCHAR szDrive;
ZeroMemory(szLogicalDriveStrings,BUFSIZE);
GetLogicalDriveStrings(BUFSIZE-1,szLogicalDriveStrings);
szDrive = (PCHAR)szLogicalDriveStrings;
do
{
GetDirverInfo(szDrive);//获得属性
cout<<szDrive<<endl;
szDrive+=(lstrlen(szDrive)+1);
}while(*szDrive != '\x00');
//这里遍历获得的是“C:\”...
(3)HANDLE FindFirstVolume(LPTSTR lpszVolumeName,DWORD cchBufferLength);
BOOL FindNextVolume(HANDLE hFindVolume,LPTSTR lpszVolumeName,DWORD cchBufferLength);
hFindVolume,使用的的是FindFirstVolume获得HANDLE,
lpszVolumeName,指向保存驱动器名的内存缓冲区
cchBufferLength,参数是lpszVolumeName所指向的缓冲区大小,以字节为单位
例子
hVol= FindFirstVolume (buf,BUFSIZE);
if(hVol  == INVALID_HANDLE_VALUE){
printf(TEXT("NO volumes found!\n"));
return -1;
}
GetDirverInfo(szDrive)//获得属性
while(FindNextVolume(hVol,buf,BUFSIZE)){
GetDirverInfo(szDrive);//获得属性
}
//需要注意一点的就是这里的结果和用getLogicalDriveStrings的结果不一样,这里返回的是\\?\Volume{GUID}形式的
(4)BOOL GetVolumeInformation(
LPCTSTR lpRootPathName,//指向所要获得属性的驱动器的根路径字符串(就是(2),(3)遍历完单个的字符串)
LPTSTR lpVolumeNameBuffer,//返回驱动器名
DWORD nVolumeNameSize,//lpVolumeNameBuffer的内存缓冲区大小
LPDWORD lpVolumeSerialNumber,//存储驱动器序列号
LPDWORD lpMaximumComponentLength,//返回文件系统所支持的文件组成部分的最大值
LPDWORD lpFileSystemFlags,//属性用来判断多种驱动器属性值,WinNT.h里面,FILE_开头的
LPTSTR lpFileSystemNameBuffer,//表示文件系统类型
DWORD nFileSystemNameSize//lpFileSystemNameBuffer的缓冲
);
例子
void GetDirverInfo(LPSTR szDrive){
DWORD dwVolumeSerialNumber;
DWORD dwMaximumComponentLength;
DWORD dwFileSystemFlags;
CHAR szFileSystemNameBuffer[BUFSIZE];
CHAR szDirveName[MAX_PATH];
GetVolumeInformation(szDrive,szDirveName,MAX_PATH,
&dwVolumeSerialNumber,&dwMaximumComponentLength,
&dwFileSystemFlags,szFileSystemNameBuffer,BUFSIZE);
}
 
 
 
现在介绍的API,简单来说就是给你的盘一个快捷键。(操作驱动器挂载点)

(1)HANDLE FindFirstVolumeMountPoint(LPTSTR lpszRootPathName,LPTSTR lpszVolumeMountPoint,
DWORD cchBufferLength);
BOOL FindNextVolumeMountPoint(HANDLE hFindVolumeMountPoint,lpszVolumeMountPoint,DWORD cchBufferLength);
lpszRootPathName,指定要查找的卷名,必须以反斜杆结尾
lpszVolumeMountPoint,找到第一个挂载点
cchBufferLength,用来储存输出挂载点的缓存的大小
hFindVolumeMountPoint,查找句柄,由FindFirstVolumeMountPoint获取
(2)BOOL FindVolumeMountPointClose(HANDLE hFindVolumeMountPoint)关闭卷句柄
(3)BOOL GetVolumeNameForVolumeMountPoint(LPCTSTR lpsVolumeMountPoint,LPTSTR lpszVolumeName,DWORD cchBufferLength);
BOOL SetVolumeMouthPoint(LPTSTR lpszVolumeMountPoint,LPCTSTR lpszVolumeName)
lpszVolumeMountPoint:指定需要查找挂载点或者根目录
lpszVolummeName:挂载点对应的卷设备名,"\\?\Volume{GUID}".
cchBufferLength:用来储存输出设备名的缓存大小
 
string转换成LPCTSTR类型
string s = "";
LPCTSTR lpctstr=s.c_str();
 
 
获取磁盘分区的总容量、空闲容量、簇、扇区信息

(1)BOOL  GetDiskFreeSpace(
LPCTSTR lpRootPathName,//指向所要获取磁盘空间信息的分区根路径字符串
LPDWORD lpSectorsPerCluster,//指向存储每簇区数的DWORD类型变量
LPDWORD lpBytesPerSector,//指向存储每扇区字节数的DWORD类型变量
LPDWORD lpNumberOfFreeClusters,//指向存储空闲簇的DWORD类型变量
LPDWORD lpTotalNumberOfClusters//指向存储总簇数的DWORD类型变量
)
例子:
DWORD dwSectPerClust,dwBytesPerSect,
dwFreeClusters,dwTotalClusters;
BOOL bResult = GetDiskFreeSpace(
pszDrive,
&dwSectPerClust,
&dwBytesPerSect,
&dwFreeClusters,
&dwTotalClusters
);
说明下所得的值怎么算
空闲的簇数量*每簇的扇区数量*每扇区的容量=空闲空间总字节(参数1*参数2*参数3)
总簇数量*每簇的扇区数量*每扇区的容量=磁盘总字节(参数1*参数2*参数4)
 
(2)BOOL GetDiskFreeSpaceEx(
PCTSTR lpDire,//指向所要获取磁盘空间信息的磁盘分区根路径字符串
PULARGE_INTEGER lpFreeBytesAvailable,//指向用于存储可获得的总字节数量的变量
PULARGE_INTEGER lpTotalNumberOfBytes,//指向存储磁盘空间总字节数据的变量
PULARGE_INTEGER lpTotalNumberOfFreeBytes//存储磁盘空闲空间总字节的变量
)
例子:
DWORD64 qwFreeBytesToCaller,qwTotalBytes,qwFreeBytes;
DWORD dwSectPerClust,dwBytesPerSect,dwTotalClusters;
BOOL bResult = GetDiskFreeSpaceEx(pszDrive,
(PULARGE_INTEGER)&qwFreeBytesToCaller,
(PULARGE_INTEGER)&qwTotalBytes,
(PULARGE_INTEGER)&qwFreeBytes);
可以直接得到字节数

Windows API 磁盘的更多相关文章

  1. C# Windows API

    API:应用程序接口(API:Application Program Interface)应用程序接口(API:application programming interface)是一组定义.程序及协 ...

  2. Windows API 函数列表 附帮助手册

    所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...

  3. 在VBA中使用Windows API

    VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案.通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个 ...

  4. 一些Windows API导致的Crash以及使用问题总结

    RegQueryValueEx gethostbyname/getaddrinfo _localtime64 FindFirstFile/FindNextFile VerQueryValue Crea ...

  5. Windows API 之 CreateFile

    Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file ...

  6. Windows API Finishing

    input { font-size: 14px; height: 26px } td { border-style: none; border-color: inherit; border-width ...

  7. Windows API教程文件系统

    本篇文章主要介绍了"Windows API教程文件系统",主要涉及到Windows API教程文件系统方面的内容,对于Windows API教程文件系统感兴趣的同学可以参考一下. ...

  8. windows的磁盘操作之九——区分本地磁盘与移动硬盘

    http://cutebunny.blog.51cto.com/301216/674443 最近碰到了个新问题,记录下来作为windows的磁盘操作那个系列的续篇吧. 一些时候我们的程序需要区分本地存 ...

  9. LoadLibrary文件路径及windows API相关的文件路径问题

    LoadLibrary HMODULE WINAPI LoadLibrary( _In_  LPCTSTR lpFileName ); Loads the specified module into ...

随机推荐

  1. 嵌入式 fork与vfork的区别

    fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别: 1.  fork  ():子进程拷贝父进程的数据段,代码段     vfork ( ):子进程与父进程共享数据段 ...

  2. Yii: 设置数据翻页

    一种方法是使用CPagination处理翻页需要的数据如:总数据项数,每页数据项数,当前页,然后在视图中使用CBasePager来绘制. 控制器动作的代码示范: function actionInde ...

  3. C++模板知识小结

    模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性.模版可以分为两类,一个是函数模版,另外一个是类模版. 由于类模板包含类型参数,因 ...

  4. qq互联登陆开发流程

    宋正河整理 百度文库在线观看: http://wenku.baidu.com/view/96da9744e518964bcf847c47.html?st=1 csdn免积分下载: http://dow ...

  5. js保留小数点后N位的方法介绍

    js保留小数点后N位的方法介绍 利用toFixed函数 代码如下 复制代码 <script language="javascript"> document.write( ...

  6. IE对toLocaleString小数位处理

    在js中对数值的格式化经常会用到四舍五入.保留小数位数.百分制格式化,分别会用到以下方法 <script type="text/javascript"> var n = ...

  7. 15+ 易响应的CSS框架快速开启你的敏捷网站项目

    由 于移动互联用户的快速增加,现在数量已经超出10亿,几乎可以肯定的是你的网站每天都会有移动用户访问.如果你组织计划创建一个对移动用户友好的浏览体 验,有多个方面需要考虑.响应快速的网站设计似乎现在很 ...

  8. 基于MapReduce的关系代数运算(2)

    1.自然连接 Map函数:对于R中的每个元组(a,b),生成键值对(b,(R,a)),对于S中的每个元组(b,c),生成键值对(b,(S,c)) Reduce函数:每个键值b会与一系列对相关联,这些对 ...

  9. ipmotool

    ipmitool 命令收集 ipmitool 命令收集 from:http://blog.chinaunix.net/u2/70049/showart_1850139.html IPMI远程管理实验 ...

  10. 【转】XML之命名空间的作用(xmlns)

    原文链接:http://blog.csdn.net/zhch152/article/details/8191377 命名空间的作用,下面的内容是转载的,大家可以看看:   问题的出现:XML的元素名字 ...