Seite 1 von 1
Ist ein Pfad lokal oder auf einem Share?
Verfasst: Dienstag 13. Januar 2009, 10:47
von ws
Hallo,
wie kann ich unter Windows feststellen, ob ein gegebener Pfad auf einem lokalen Laufwerk oder auf einem Share liegt?
Hintergrund: in einer Windows-Applikation habe ich das Problem, daß ich wissen muß, ob ein Pfad auf einem lokalen Laufwerk oder auf einem Share liegt. Hintergrund ist, daß für die Hilfe CHM-Dateien benutzt werden, die über die IE-Engine geöffnet werden und entsprechende Sicherheitsprobleme aufwerfen. Die entsprechenden Dateien befinden sich in einem Pfad relativ zu der Applikation. Verschiebe ich meine Applikation auf ein Share, dann werden die nachzuladenden Dateien von der IE-Engine als unsicher klassifiziert. Ich möchte aber weder die systemweiten Sicherheitsrichtlinien, noch die Registry anpassen müssen.
Vielen Dank im Voraus
Wolfgang
Re: Ist ein Pfad lokal oder auf einem Share?
Verfasst: Dienstag 13. Januar 2009, 11:58
von gerold
ws hat geschrieben:wie kann ich unter Windows feststellen, ob ein gegebener Pfad auf einem lokalen Laufwerk oder auf einem Share liegt?
Hallo Wolfgang!
Ich bin mir nicht sicher... probiere es mal mit ``os.path.ismount``.
mfg
Gerold

... gelöst ...
Verfasst: Dienstag 13. Januar 2009, 13:46
von ws
Hallo Gerold,
vielen Dank für den Tip. Leider liefert auch os.path.ismount(r"c:") True, d.h. daran kann ich nicht erkennen, ob es ein Netzwerklaufwerk ist. Eine Lösung gibt es, wenn man die win32-Module an Bord hat (ungetestet):
Code: Alles auswählen
def isPathOnNetworkDevice(pth):
"""
Check if path pth is located on a network drive.
"""
ret = False
pth = os.path.abspath(pth)
if os.path.exists(pth):
# path exists, does it contain a drive letter?
head, tail = os.path.splitdrive(pth)
if head:
try:
win32net.NetUseGetInfo(None, pth)
ret = True
except pywintypes.error, e:
# this is not a network drive
pass
else:
# pth does not start with a drive letter, so it has to be
# located on an network drive
ret = True
return ret
Gruß
Wolfgang
... kleiner Fehler
Verfasst: Dienstag 13. Januar 2009, 14:05
von ws
Obige Lösung war noch etwas buggy, in Zeile 15 müßte es
heißen.
Gruß
Wolfgang
Verfasst: Dienstag 13. Januar 2009, 18:37
von mosenturm
Wie wäre es mit:
os.path.splitunc()
Verfasst: Dienstag 13. Januar 2009, 19:05
von Leonidas
mosenturm hat geschrieben:os.path.splitunc()
Wie hilft dir das, wenn der Share als Platte eingebunden ist, also quasi als Laufwerk sichtbar ist und keinen UNC-Pfad hat?
Ansonsten wäre es ja trivial, da müsste man nur schauen ob der Pfad mit ``\\`` anfängt.
Verfasst: Dienstag 13. Januar 2009, 19:24
von mosenturm
Leonidas hat geschrieben:mosenturm hat geschrieben:os.path.splitunc()
Wie hilft dir das, wenn der Share als Platte eingebunden ist, also quasi als Laufwerk sichtbar ist und keinen UNC-Pfad hat?
Kann ich leider nicht testen. Aber selbst wenn dem Share ein Laufwerksbuchstabe zugeordnet ist, ist doch irgendwo intern ein UNC Pfad vorhanden. Vielleicht kann das ja mal jemand testen.
Verfasst: Dienstag 13. Januar 2009, 21:57
von mosenturm
os.path.splitunc() macht ja nichts weiter, als einen String zu zerlegen. Ich dachte, hier werden irgendwelche OS-spezifische Befehle im Hintergrund ausgeführt.
Somit ist es natürlich nicht für die Problemlösung zu gebrauchen.
Es bleiben nur noch Windows-API aufrufe über das pywin32 Paket.
Unter folgenden Links gibt es dazu Infos (muss natürlich noch in Python umgesetzt werden

):
http://support.microsoft.com/support/kb ... 2/6/89.ASP
http://www.dbwiki.de/wiki.php?title=VBA ... _ermitteln