【发布时间】:2013-06-26 19:23:38
【问题描述】:
如果我只知道设备名称是“\.\PhysicalDrive0”而没有文件系统或卷标,如何从 Windows 中的块设备或原始磁盘获取大小?
我尝试了以下方法:
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(),但它似乎只适用于具有文件系统和分配卷标的磁盘。
对原始磁盘或块设备执行此操作的正确方法是什么?
提前致谢。
【问题讨论】:
-
stackoverflow.com/questions/7135398/… 可能会回答您的问题。
-
谢谢,这是很棒的信息。现在我可以写信了,但是当我使用 .seek(0,2) 或 .seek(0,os.SEEK_END) 来获取大小时,它什么也不返回,似乎不知道结尾在哪里设备。
-
现在您似乎正在使用与文件对象关联的 seek 方法(seek,而不是 lseek),您是否将 os.open 返回的文件描述符更改为文件对象?你可以通过使用 os.fdopen 来做到这一点。
-
是的,像 fo=os.fdopen(os.open("\\\\.\\PhysicalDrive3", os.O_RDONLY|os.O_BINARY), "rb+") 和 fo.seek (0,2) 不起作用
标签: python windows filesize diskspace block-device