21xrx.com
2024-12-22 23:30:30 Sunday
登录
文章检索 我的文章 写文章
如何使用C++获取硬盘容量?
2023-07-02 04:16:00 深夜i     --     --
C++ 获取 硬盘容量

硬盘是计算机存储数据的重要部件,知道硬盘容量可以帮助我们更好地管理和利用这个资源。在C++编程中,我们可以使用一些方法来获取硬盘容量。

在使用C++获取硬盘容量之前,我们应该了解硬盘的相关知识。硬盘容量通常以字节或者GB、TB等单位表示,也包括硬盘的总容量和可用容量。硬盘容量由操作系统统计和管理,C++编写的程序可以调用相关操作系统API接口获取硬盘信息。

下面是获取硬盘信息的基本流程:

1.载入库文件

为了获取硬盘信息,我们需要调用Windows系统提供的API接口。首先需要载入库文件,包括Windows.h和WinIoCtl.h等库。

2.创建HANDLE对象

HANDLE是一个操作句柄,可以把它看成文件指针,用于操作与其关联的对象。在此我们需要创建一个HANDLE对象与指定的硬盘关联。

3.获取硬盘信息

使用DeviceIoControl函数获取硬盘信息,其中,通过传递IOCTL_DISK_GET_DRIVE_GEOMETRY_EX参数告诉函数获取硬盘信息。

4.转换大小单位

硬盘容量由字节表示,可以将其转换为更便于理解的MB或GB等单位值。

下面是示例代码,演示如何使用C++获取硬盘容量:


#include<Windows.h>

#include<WinIoCtl.h>

#include<iostream>

#include<string>

using namespace std;

int main()

{

  string disk = "C:";

  HANDLE hDevice = CreateFile(

    (disk + "\\").c_str(),

    0,

    FILE_SHARE_READ | FILE_SHARE_WRITE,

    NULL,

    OPEN_EXISTING,

    0,

    NULL);

  if (hDevice == INVALID_HANDLE_VALUE) {

    cout << "CreateFile fail, error code = " << GetLastError() << endl;

    return 0;

  }

  STORAGE_PROPERTY_QUERY storagePropertyQuery;

  ZeroMemory(&storagePropertyQuery, sizeof(STORAGE_PROPERTY_QUERY));

  storagePropertyQuery.PropertyId = StorageDeviceProperty;

  storagePropertyQuery.QueryType = PropertyStandardQuery;

  STORAGE_DEVICE_DESCRIPTOR storageDeviceDescriptor;

  ZeroMemory(&storageDeviceDescriptor, sizeof(STORAGE_DEVICE_DESCRIPTOR));

  if (!DeviceIoControl(hDevice,

    IOCTL_STORAGE_QUERY_PROPERTY,

    &storagePropertyQuery,

    sizeof(STORAGE_PROPERTY_QUERY),

    &storageDeviceDescriptor,

    sizeof(STORAGE_DEVICE_DESCRIPTOR),

    NULL,

    NULL)) {

    cout << "DeviceIoControl fail, error code = " << GetLastError() << endl;

    CloseHandle(hDevice);

    return 0;

  }

  DISK_GEOMETRY_EX dge;

  memset(&dge, 0, sizeof(DISK_GEOMETRY_EX));

  DWORD dwBytesReturned = 0;

  BOOL bResult = DeviceIoControl(

    hDevice,

    IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,

    NULL,

    0,

    &dge,

    sizeof(DISK_GEOMETRY_EX),

    &dwBytesReturned,

    NULL);

  if (bResult) {

    cout << "硬盘总容量为:" << double(dge.DiskSize.QuadPart) / (1024 * 1024 * 1024) << " GB" << endl;

    cout << "硬盘可用容量为:" << double(dge.DiskSize.QuadPart - dge.Geometry.BytesPerSector * dge.Geometry.SectorsPerTrack * dge.Geometry.TracksPerCylinder * dge.Geometry.Cylinders.QuadPart) / (1024 * 1024 * 1024) << " GB" << endl;

  }

  else {

    cout << "DeviceIoControl fail, error code = " << GetLastError() << endl;

  }

  CloseHandle(hDevice);

  return 0;

}

总结:

C++可以调用操作系统API接口获取硬盘容量等信息,实现了对计算机硬件的更深层次利用。获取硬盘容量可以帮助我们更好的管理计算机存储空间,更好地利用这个宝贵资源。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复