Вопрос

Мне нужна функция, чтобы определить, является ли каталог точкой монтирования диска.Я уже нашел этот код, который хорошо работает для Linux:

def getmount(path):
  path = os.path.abspath(path)
  while path != os.path.sep:
    if os.path.ismount(path):
      return path
    path = os.path.abspath(os.path.join(path, os.pardir))
  return path

Но я не уверен, как заставить это работать в Windows.Могу ли я просто предположить, что точка монтирования — это буква диска (например,С:)?Я считаю, что в Windows возможно сетевое монтирование, поэтому я хотел бы также иметь возможность обнаружить это монтирование.

Это было полезно?

Решение

Windows не называла их «точками монтирования» [редактировать:теперь это так, см. ниже!], и два типичных/традиционных синтаксиса, которые вы можете найти для них, — это либо буква диска, например Z:, или еще \\hostname (с двумя обратными косыми чертами в начале:осторожно убегайте или используйте r'...' обозначение в Python для таких литеральных строк).

редактировать:поскольку поддерживаются точки монтирования NTFS 5.0, но согласно эта почта API для них находится в довольно плохом состоянии — «сломанный и плохо документированный», как говорится в заголовке поста.Возможно, выполнение поставляемого Microsoft mountvol.exe это наименее болезненный способ - mountvol drive:path /L должен выдать имя смонтированного тома по указанному пути или просто mountvol такой список всех таких монтировок (я должен сказать «должен», потому что сейчас не могу проверить).Вы можете выполнить его с помощью subprocess.Popen и проверьте его вывод.

Другие советы

Вы хотите найти точку монтирования или просто определить, является ли это точкой монтирования?

Тем не менее, как отмечалось выше, в WinXP можно сопоставить логический диск с папкой.

Подробности смотрите здесь: http://www.modzone.dk/forums/showthread.php?threadid=278

Я бы попробовал win32api.GetVolumeInformation

>>> import win32api
>>> win32api.GetVolumeInformation("C:\\")
    ('LABEL', 1280075370, 255, 459007, 'NTFS')
>>> win32api.GetVolumeInformation("D:\\")
    ('CD LABEL', 2137801086, 110, 524293, 'CDFS')
>>> win32api.GetVolumeInformation("C:\\TEST\\") # same as D:
    ('CD LABEL', 2137801086, 110, 524293, 'CDFS')
>>> win32api.GetVolumeInformation("\\\\servername\\share\\")
    ('LABEL', -994499922, 255, 11, 'NTFS')
>>> win32api.GetVolumeInformation("C:\\WINDOWS\\") # not a mount point
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    pywintypes.error: (144, 'GetVolumeInformation', 'The directory is not a subdirectory of the root directory.')

Вот код для возврата пути UNC, на который указывает буква диска.Полагаю, есть более удобный способ сделать это, но я решил внести свой небольшой вклад.

import sys,os,string,re,win32file
for ch in string.uppercase:  # use all uppercase letters, one at a time
    dl = ch + ":"
    try:
        flds = win32file.QueryDosDevice(dl).split("\x00")
    except:
        continue
    if re.search('^\\\\Device\\\\LanmanRedirector\\\\',flds[0]):
        flds2 = flds[0].split(":")
    st = flds2[1]
    n = st.find("\\")
    path = st[n:] 
        print(path)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top