python - 如何使用 Python 在 Windows 中获取原始磁盘或 block 设备大小

标签 python windows filesize diskspace block-device

如果我只知道设备名称为“\.\PhysicalDrive0”且没有文件系统或卷标,如何从 Windows 中的 block 设备或原始磁盘获取大小?

我尝试了以下方法:

fd = os.open(r"\.\PhysicalDrive0", os.O_RDONLY)

os.lseek(fd, 0, os.SEEK_END)

它在 Linux 上运行良好,但在 Windows 上总是返回“OSError: [Errno 22] Invalid argument”。

我还尝试了 ctypes.windll.kernel32.GetDiskFreeSpaceExW(),但它似乎只适用于具有文件系统和分配的卷标的磁盘。

对原始磁盘或 block 设备执行此操作的正确方法是什么?

提前致谢。

最佳答案

使用 wmi模块

import wmi
c = wmi.WMI()
[drive] = c.Win32_DiskDrive(Index=0)
print("The disk has %s bytes" % drive.size)
print("Or %s GB" % int(int(drive.size) / 1024**3))

磁盘有 320070320640 字节
或 298 GB

此代码在 WMI 接口(interface)中查询索引等于 0Win32_DiskDrive 对象(因此只有一个结果,结果是 PHYSICALDRIVE0)。 drive 对象有一个名为 size 的属性,它是一个包含驱动器大小(以字节为单位)的字符串。

关于python - 如何使用 Python 在 Windows 中获取原始磁盘或 block 设备大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17374551/

相关文章:

python - 正则表达式。查找多次出现的模式

python - 具有多个输入的并行化函数

python - scipy.optimize.minimize 在神经网络中的使用

c++ - visual studio中Windows应用程序崩溃.dmp文件分析

java - 检测用 Java 读取的文件

Javascript 检查文件大小

python - 使用套接字分别发送 2 条消息

c# - 如何在 WinRT 中获取文件大小?

java - App Engine 最大文件大小超出错误 413

c++ - 一个进程可以覆盖另一个进程的内存吗?