Frage

Ich brauche eine Funktion, um zu bestimmen, ob ein Verzeichnis ein Mount-Punkt für ein Laufwerk ist. Ich habe diesen Code bereits die gut für Linux funktioniert:

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

Aber ich bin nicht sicher, wie ich das bekommen würde auf Windows zu arbeiten. Kann ich davon ausgehen, nur den Mount-Punkt wird den Laufwerksbuchstaben (beispielsweise C :)? Ich glaube, dass es möglich ist, ein Netzwerk an Fenstern montieren haben, so ich möchte in der Lage sein, das auch montieren zu erkennen.

War es hilfreich?

Lösung

Fenster habe sie nicht nennen verwenden, um „Einhängepunkte“ [ Bearbeiten : es jetzt ist, siehe unten!], Und die beiden typischen / traditionell Syntaxen können Sie finden sie entweder ein Laufwerk Buchstabe, zB Z:, sonst \\hostname. (mit zwei führenden Schrägstrichen: entkommen oder sorgfältig r'...' Notation in Python fpr solche Zeichenkette verwenden)

Bearbeiten : da NTFS 5.0-Bereitstellungspunkte werden unterstützt, aber nach diesen Beitrag die API für sie in ganz einem Zustand ist, - "gebrochen und schlecht dokumentiert", sagt der Post Titel. Vielleicht die Ausführung der von Microsoft bereitgestellte

Andere Tipps

Haben Sie den Mount-Punkt finden wollen oder einfach nur festzustellen, ob es sich um ein Mount-Punkt ist?

Unabhängig davon, wie oben ausgeführt, ist es möglich, in WinXP ein logisches Laufwerk in einen Ordner zu kartieren.

Sehen Sie hier für weitere Details: http://www.modzone.dk/ Foren / showthread.php? threadid = 278

Ich würde versuchen, 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.')

Hier ist ein Code der UNC-Pfad durch einen Laufwerksbuchstaben wies auf zurückzukehren. Ich nehme an, es ist eine glatte Art und Weise, dies zu tun, aber ich dachte, ich würde meinen kleinen Teil dazu beitragen.

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top