如何在python中获取驱动器的名称

2024-10-04 01:22:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有效的驱动器号列表,我想向最终用户提供一个选择。我想让他们看看驱动器的名称。下面的代码应该显示驱动器的名称F:\

import ctypes

kernel32 = ctypes.windll.kernel32
buf = ctypes.create_unicode_buffer(1024)

kernel32.GetVolumeNameForVolumeMountPointW(
    ctypes.c_wchar_p("F:\\"),
    buf,
    ctypes.sizeof(buf)
)

print buf.value

但是,这会输出\\?\Volume{a8b6b3df-1a63-11e1-9f6f-0007e9ebdfbf}\。如何获取windows在资源管理器中显示的字符串(例如,KINGSTON,对于我拥有的某个闪存驱动器)?


编辑:

仍然不起作用:

volumeNameBuffer = ctypes.create_unicode_buffer(1024)
fileSystemNameBuffer = ctypes.create_unicode_buffer(1024)

kernel32.GetVolumeInformationW(
    ctypes.c_wchar_p("C:\\"),
    volumeNameBuffer,
    ctypes.sizeof(volumeNameBuffer),
    fileSystemNameBuffer,
    ctypes.sizeof(fileSystemNameBuffer)
)

这给了我一个错误:

WindowsError: exception: access violation reading 0x3A353FA0

Tags: 代码import名称列表buffercreateunicodectypes
3条回答

使用上面的片段,我填写了缺少的(可选,空)参数作为快速帮助:

import ctypes
kernel32 = ctypes.windll.kernel32
volumeNameBuffer = ctypes.create_unicode_buffer(1024)
fileSystemNameBuffer = ctypes.create_unicode_buffer(1024)
serial_number = None
max_component_length = None
file_system_flags = None

rc = kernel32.GetVolumeInformationW(
    ctypes.c_wchar_p("F:\\"),
    volumeNameBuffer,
    ctypes.sizeof(volumeNameBuffer),
    serial_number,
    max_component_length,
    file_system_flags,
    fileSystemNameBuffer,
    ctypes.sizeof(fileSystemNameBuffer)
)

print volumeNameBuffer.value
print fileSystemNameBuffer.value

这应该可以复制和粘贴。

改为尝试^{}函数。它直接返回卷标。

为什么不使用win32api.GetVolumeInformation?

import win32api
win32api.GetVolumeInformation("C:\\")

输出

('WINDOWS', 1992293715, 255, 65470719, 'NTFS')

相关问题 更多 >