我在 Windows 8 上使用 python 3.3 32 位。我想从物理磁盘读取二进制扇区。我能够从设备打开、查找、读取、告知,但文件结尾不会产生空的读取结果,它会引发权限异常 (33)。我也无法使用相对于结尾的搜索,例如搜索(-512,os.SEEK_END)。任何 SEEK_END 或 2 的使用都会引发 Invalid Argument。
我真的不希望必须使用权限异常来检测 eof,因为在读取设备时可能会出现真正的权限错误,并且需要警告用户此故障。
我欢迎任何关于这里出了什么问题的提示,或者检测 eof 的替代方法。
代码示例如下,设备为 1GBit USB。seek/tell/prints 是为了表明在 eof 之前读取是正常的。
代码:
device = r'\\.\PhysicalDrive2'
disk = open(device,'rb')
disk.seek(1994231*512)
sector = disk.read(512)
while sector!="":
sector = disk.read(512)
print(disk.tell())
输出:
1021047296 1021047808 1021048320 1021048832 1021049344 1021049856 1021050368 Traceback(最近一次调用最后):文件“D:\Development\eclipse\test\test.py”,第 25 行,扇区 = disk.read(512) IOError: [Err拒绝