windows API 获取磁盘信息

GetLogicalDriveStrings - 获取系统中存在的逻辑驱动器字符串
GetLogicalDriveStrings(
nBufferLength: DWORD; {缓冲区大小}
lpBuffer: PAnsiChar {缓冲区}
): DWORD;

获取磁盘名称填充到lpbuffer.
GetVolumeInformation - 读取文件系统信息
GetVolumeInformation(
lpRootPathName: PChar; {磁盘驱动器代码字符串}
lpVolumeNameBuffer: PChar; {磁盘驱动器卷标名称}
nVolumeNameSize: DWORD; {磁盘驱动器卷标名称长度}
lpVolumeSerialNumber: PDWORD; {磁盘驱动器卷标序列号}
var lpMaximumComponentLength: DWORD; {系统允许的最大文件名长度}
var lpFileSystemFlags: DWORD; {文件系统标识}
lpFileSystemNameBuffer: PChar; {文件操作系统名称}
nFileSystemNameSize: DWORD {文件操作系统名称长度}
): BOOL;
GetDiskFreeSpaceEx - 获取磁盘容量信息
BOOL GetDiskFreeSpace(
LPCTSTR lpRootPathName, 
LPDWORD lpSectorsPerCluster, 
LPDWORD lpBytesPerSector,
LPDWORD lpNumberOfFreeClusters,
LPDWORD lpTotalNumberOfClusters

);


==================================================================================================

#include 
#include 


void getType(char *);
int main(int argc, char** args) 
{
	char dwPath[MAX_PATH] = { 0 };
	char* p = dwPath;
	
	GetLogicalDriveStrings(MAX_PATH - 1, dwPath);
	int s = strlen(dwPath);
	do
	{

		CHAR volumeNmaeBuff[MAX_PATH];
		DWORD volumeSerialNumber;
		DWORD maximumComponentLength;
		DWORD fileSystemFlag;
		CHAR fileSystemName[MAX_PATH];
	
		//getType(p);
		
		if (GetVolumeInformation(p, 
			volumeNmaeBuff, 
			MAX_PATH, 
			&volumeSerialNumber, 
			&maximumComponentLength, 
			&fileSystemFlag, 
			fileSystemName, 
			MAX_PATH)) 
		{
			printf("\r\n==========================================================\r\n");
			printf("%s  \r\n", p);
			if (strlen(volumeNmaeBuff)!=0)
			{
				printf("驱动器卷标:%s\r\n", volumeNmaeBuff);
			}
			printf("驱动器序列号:%lu\r\n\
最大文件名长度:%u\r\n\
文件系统标识:%u\r\n\
文件系统类型:%s\r\n", volumeSerialNumber, maximumComponentLength, fileSystemFlag, fileSystemName);
			
		}
		else
		{
			
			return FALSE;
		}
		

		p += (s+1);

		
	} while (*p!='\x00');
	

	

	

	system("pause");
	return 0;
}

void getType(char * str)
{
	
	UINT uTYPE;
	uTYPE = GetDriveType(str);
	switch (uTYPE)
	{

	case DRIVE_UNKNOWN:
		printf("%s  未知磁盘类型\r\n", str);
		break;
	case DRIVE_NO_ROOT_DIR:
		printf("%s  无效盘符\r\n", str);
		break;
	case DRIVE_REMOVABLE:
		printf("%s  移动磁盘\r\n", str);
		break;
	case DRIVE_FIXED:
		printf("%s  固定磁盘\r\n", str);
		break;
	case DRIVE_REMOTE:
		printf("%s  网络磁盘\r\n", str);
		break;
	case DRIVE_CDROM:
		printf("%s  光驱\r\n", str);
		break;
	case DRIVE_RAMDISK:
		printf("%s  RAM磁盘\r\n", str);
	default:
		break;
	}
}



你可能感兴趣的:(winAPI)