Windows 8でpython 3.3 32ビットを使用しています。物理ディスクからバイナリセクターを読み取りたいです。デバイスから開く、シークする、読み取る、伝えることはできますが、ファイルの終わりで空の読み取り結果が生成されず、許可例外 (33) がスローされます。また、seek(-512,os.SEEK_END) のように、最後に関連するシークも使用できません。SEEK_END または 2 を使用すると、無効な引数がスローされます。
デバイスを読み取るときに実際の許可エラーが発生する可能性があり、ユーザーにこの失敗を警告する必要があるため、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 トレースバック (最後の最後の呼び出し): ファイル "D:\Development\eclipse\test\test.py"、25 行目、セクター = disk.read(512) [Err no IOError3]拒否された