【问题标题】:Format Drive in Python在 Python 中格式化驱动器
【发布时间】:2014-12-19 15:07:10
【问题描述】:

我正在尝试制作一个 Python 3.3 程序来格式化 Windows 中的驱动器,例如 SD 卡或 USB 记忆棒。我在这里尝试了代码:http://bytes.com/topic/python/answers/537724-formatting-device-script-windows。起初它给了我一个错误,但经过一些调整后它没有。它运行了,但我的 USB 驱动器没有任何反应。这是我正在使用的代码。 (顺便说一句,这是使用 ctypes 模块)请帮忙!

def myFmtCallback(command, modifier, arg):
    print(command)
    return 1    # TRUE

def format_drive(Drive, Format, Title):
    fm = windll.LoadLibrary('fmifs.dll')
    FMT_CB_FUNC = WINFUNCTYPE(c_int, c_int, c_int, c_void_p)
    FMIFS_HARDDISK = 0x0C
    fm.FormatEx(c_wchar_p(Drive), FMIFS_HARDDISK, c_wchar_p(Format),
                c_wchar_p(Title), True, c_int(0), FMT_CB_FUNC(myFmtCallback))

我相应地调用函数:

format_drive('F:\\', 'NTFS', 'USBDrive')

程序会打印出来:

>>>
9
11

【问题讨论】:

  • 你是如何使用你的函数的?您如何将(以及哪些)参数传递给函数?
  • 小心这个。
  • 小心什么?
  • 我不知道你的参数是什么意思,但是当程序运行时回调会打印出来:>>> 9 11
  • @Luke: myFmtCallback 传递了三个参数:命令、修饰符和参数。打印命令参数。也许修饰符也是。该参数提供了额外的信息,例如它是否失败。

标签: python windows python-3.x ctypes


【解决方案1】:

我找到了解决方案!这一行:

 FMIFS_HARDDISK = 0x0C

应该是这样的

 FMIFS_UNKNOWN = 0

这只是将其格式化为未知!

【讨论】:

  • 我用0xB 试过了,它奏效了,但花了更长的时间。这又有什么好处呢?
  • 优点是使用字符串是错误的,它之所以有效,是因为它默认为Unknown(0)。要么故意使用Unknown 让系统确定媒体类型,要么提供正确的媒体类型——RemoveableMedia (11) 或FixedMedia (12)。
  • 无论哪种方式都将是未知的,因为该程序是用于分发的。也就是说,0xC0xB 会更可取吗?或者可能只是未知数?
  • 对于未格式化的驱动器F:windll.kernel32.GetDriveTypeW('F:\\') 会得到什么?可能是DRIVE_REMOVABLE (2)。
【解决方案2】:

我一直在努力寻找有关 windows 调用的文档,但我在 Microsoft 上找不到与此处调用 FormatEx 的方式相匹配的任何内容。

我终于找到了这个:http://doxygen.reactos.org/df/d85/fmifs_8h_source.html

这里你可以找到如何设置集群大小的例子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 2011-12-25
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2011-04-22
    相关资源
    最近更新 更多