使用Python格式化驱动器

4

我正在尝试制作一个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

你是如何使用你的函数的?你是如何传递(以及哪些)参数给这些函数的? - llrs
@Luke:myFmtCallback 接收三个参数:命令、修饰符和参数。打印出命令 参数,也许还有修饰符。参数提供了额外的信息,比如它是否失败了。 - icktoofay
我只是使用在其他地方找到的代码。myFmtCallback 函数仅在此处调用:FMT_CB_FUNC(myFmtCallback)) - Luke Dinkler
顺便说一下,你可以在上面看到我使用的所有代码。还有关于myFmtCallback函数。 - Luke Dinkler
好的!我找到解决方案了!在这行代码中:FMIFS_HARDDISK = 0x0C0x0C 应该用文本形式表示(加上引号)。感谢你的帮助!(愚蠢的错误) - Luke Dinkler
显示剩余3条评论
2个回答

3
我发现解决方案了!这行代码是:

 FMIFS_HARDDISK = 0x0C

应该像这样

 FMIFS_UNKNOWN = 0

那只是由未知的格式化!

我用0xB试过了,虽然可以运行但是需要更长的时间。这样做的优点是什么? - Luke Dinkler
优点在于使用字符串是错误的,因为它只能按照默认值Unknown(0)工作。要么有意使用Unknown让系统确定媒体类型,要么提供正确的媒体类型- RemoveableMedia(11) 或 FixedMedia(12)。 - Eryk Sun
无论如何,它都是未知的,因为该程序是用于分发的。话虽如此,0xC0xB哪个更好?或者可能只是未知? - Luke Dinkler
对于未格式化的驱动器 F:windll.kernel32.GetDriveTypeW('F:\\') 返回什么?可能是 DRIVE_REMOVABLE(2)。 - Eryk Sun

0

我长时间寻找了Windows调用的文档,但在Microsoft上找不到与此处调用FormatEx的方式相匹配的任何内容。

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

在这里,你可以找到如何设置簇大小等信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接