c语言磁盘信息,C/C++ Windows API——获取磁盘信息

// LogicalDrive.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include

//将PULARGE_INTEGER类型的字节(B)数转化为(GB)单位

#define GB(x) (x.HighPart << 2) + (x.LowPart >> 20) / 1024.0

int main()

{

int driveCount = 0;

char szDriveInfo[16 + 1] = {0};

/* 获取主机中所有的逻辑驱动器字母,以BitMap的形式返回 DWORD GetLogicalDrives(); return 一个DWORD类型的值,第一位表示所对应的驱动器是否存在。一般情况下DWORD的数据长度是32位,在这个DWORD中,每一位对应了一个逻辑驱动器是否存在。第二位如果是“1”则表示驱动器“B:”存在,第四位如果是“1”则表示驱动器“D:”存在,以此类推 */

DWORD driveInfo = GetLogicalDrives();

_itoa_s(driveInfo, szDriveInfo, 2);

printf("GetLogicalDrives -> %016s\n", szDriveInfo);

while (driveInfo) {

if (driveInfo & 1) {

driveCount++;

}

driveInfo >>= 1;

}

printf("LogicalDriveCount = %d\n", driveCount);

/* 获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径。 DWORD GetLogicalDriveStrings( DWORD nBufferLength, // size of buffer, 如果是此参数为0 后面的lpBuffer则不使用 LPTSTR lpBuffer // drive strings buffer, 用于装载逻辑驱动器名称的字串。每个名字都用一个NULL字符分隔,在最后一个名字后面用两个NULL表示中止(空中止) 例如A:\C:\ ); return 返回填充完毕的缓冲区字符的的个数..不是长度..char和TCHAR 返回数目都是一样的.. 一般是4的倍数...(形如C:\ 包括之后的一个空字符0).. 如果缓冲区不够大,则返回值大于nBufferLength 如果失败..函数返回0..若想获得更多的错误信息,请使用GetLastError函数 */

int driveStrLen = GetLogicalDriveStrings(0, NULL);

printf("GetLogicalDriveStrings -> %d\n\n", driveStrLen);

//exception must have a constant value

//char driveStr[driveStrLen];

TCHAR *driveStr = new TCHAR[driveStrLen];

GetLogicalDriveStrings(driveStrLen, driveStr);

TCHAR *lpDriveStr = driveStr;

for (int i = 0; i < driveCount; i++) {

/* 获取磁盘类型 UINT GetDriveType( _In_opt_ LPCWSTR lpRootPathName //不包括卷名的磁盘根路径名 ); #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 */

UINT driveType = GetDriveType(lpDriveStr);

char *szDriveTypeArr[] = {

"DRIVE_UNKNOWN",

"DRIVE_NO_ROOT_DIR",

"DRIVE_REMOVABLE",

"DRIVE_FIXED",

"DRIVE_REMOTE",

"DRIVE_CDROM",

"DRIVE_RAMDISK"

};

ULARGE_INTEGER freeBytesAvailableToCaller;

ULARGE_INTEGER totalNumberOfBytes;

ULARGE_INTEGER totalNumberOfFreeBytes;

/* 获取与一个磁盘的类型以及剩余空间容量有关的信息 BOOL GetDiskFreeSpaceExW( _In_opt_ LPCWSTR lpDirectoryName, //不包括卷名的磁盘根路径名 _Out_opt_ PULARGE_INTEGER lpFreeBytesAvailableToCaller, //磁盘的可用字节数 _Out_opt_ PULARGE_INTEGER lpTotalNumberOfBytes, //磁盘的总字节数 _Out_opt_ PULARGE_INTEGER lpTotalNumberOfFreeBytes //磁盘的剩余字节数 ); */

GetDiskFreeSpaceEx(lpDriveStr, &freeBytesAvailableToCaller, &totalNumberOfBytes, &totalNumberOfFreeBytes);

printf("GetLogicalDriveStrings -> %ls\n", lpDriveStr);

printf("GetDriveType -> %d=%s\n", driveType, szDriveTypeArr[driveType]);

printf("GetDiskFreeSpaceEx -> Available=%f, Total=%f, free=%f\n\n", GB(freeBytesAvailableToCaller), GB(totalNumberOfBytes), GB(totalNumberOfFreeBytes));

lpDriveStr += 4;

}

delete driveStr;

system("pause");

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值