WMI报告驱动器比实际大小小几MB。我认为这与Windows如何处理汽缸/磁头/扇区有关。在
我的解决方案是读取超过报告的驱动器大小的末尾,直到出现错误:import wmi
disks = wmi.WMI().Win32_DiskDrive(MediaType="Removable Media")
for disk in disks:
disk_size = int(disk.size)
sector_size = disk.BytesPerSector
print(disk.name, "reported size:", disk_size)
with open(disk.name, "rb") as f:
f.seek(disk_size)
while True:
try:
f.read(sector_size)
disk_size += sector_size
except PermissionError:
break
print(disk.name, "readable size:", disk_size)
对于两个不同的32GB SD卡,我得到以下结果:
^{pr2}$
但是,实际的驱动器实际上还有1024到2048个字节,我们仍然无法读取,我不确定如何获取它们。但是,这比我们之前丢失的几个MB要好。在
编辑:似乎是buffering导致了读取最后几个字节的问题。如果我这样做,我可以读取剩余的字节open(disk.name, "rb", buffering=0)。但是ÿ