Windows API 获取卷的基本信息

1 篇文章 0 订阅

通过对 Windows API 基础的一些学习,自己编写了一个可以读取卷的名称、文件系统类型、大小和剩余大小这些基本信息的小程序。程序很简单,却也受益匪浅。


定义的宏:

#define BUFFSIZE MAX_PATH
#define DIVISOR 1073741824.0

BUFFSIZE: 保存卷的相关信息的数组的大小

MAX_PATH: C语言运行库中通过#define指令定义的一个宏常量,它定义了编译器所支持的最长全路径名的长度。(摘自百度百科)

DIVISOR(除数):用于将字节单位(Byte)转为吉字节单位(GB)

 

几种值得一提的类型:

 

ULARGE_INTEGER 和指向其的指针 PUNLARGE_INTEGER,以下为其定义:

//ULARGE_INTEGER, PULARGE_INTEGER

typedef union _ULARGE_INTEGER{
    struct{
        DWORD LowPart;
        DWORD Highpart;
    };
    struct{
        DWORD LowPart;
        DWORD Highpart;
    } u;
    ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;
        

 可以看出,该类型是一个联合体。其中,结构体通过两个 DWORD (32bit)来表示一个 64bit 的数据,而 ULONGLONG 则直接表示 64bit 数据。

 

DWORD:  一个无符号长整型类型,一般为 32bit

typedef unsigned long       DWORD;

DWORD64:一个无符号 64bit 长整型

typedef unsigned __int64 DWORD64, *PDWORD64;

 需要注意的是,在新版本中输出 64bit 长整型数据应使用 %I64i


在运行测试中,可以显示分卷的名称、文件系统类型、和大小信息,插入U盘后也可识别,但是将手机接入电脑,并调成文件传输模式却并没有识别出手机的储存空间的信息,这一点让我很迷惑,希望有明白的朋友不吝赐教

最后附上代码:

#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFFSIZE MAX_PATH
#define DIVISOR 1073741824.0
int main(void) {
	CHAR rootPathName[BUFFSIZE], volumeName[BUFFSIZE], fileSystemName[BUFFSIZE];
	DWORD volumeSerialNumber, maxFileLength, fileSystemFlags;
	HANDLE hFindVolume;
	DWORD64 freeByteAvailable, totalByte, totalFreeByte;
	hFindVolume = FindFirstVolume(rootPathName, BUFFSIZE);
	do{
		if (GetVolumeInformation(rootPathName, volumeName, BUFFSIZE,
			&volumeSerialNumber, &maxFileLength, &fileSystemFlags,
			fileSystemName, BUFFSIZE)) {
			GetDiskFreeSpaceEx(rootPathName,
				(PULARGE_INTEGER)&freeByteAvailable, (PULARGE_INTEGER)&totalByte, (PULARGE_INTEGER)&totalFreeByte);
			printf("%s \nFile Type: \t %s \nTotal Space: \t %I64i(Byte) \t %.1lf(GB) \nFree Space: \t %I64i(Byte) \t %.1lf(GB)\n",
				volumeName, fileSystemName, totalByte, totalByte / DIVISOR, freeByteAvailable, freeByteAvailable / DIVISOR);
		}
		putchar('\n');
	} while (FindNextVolume(hFindVolume, rootPathName, BUFFSIZE));
	system("pause");
	return 0;
}

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值