Wie ermittle ich den tatsächlichen Pfad eines zugeordneten Laufwerks?
Wie kann ich bestimmen, ein zugeordnetes Laufwerk tatsächlichen Pfad?
Also wenn ich ein zugeordnetes Laufwerk auf einem Computer namens "Z" wie kann ich mit .NET bestimmen, die Maschine und den Pfad für die zugeordneten Ordner?
Den code davon ausgehen, es läuft auf dem Computer mit dem zugeordneten Laufwerk.
Schaute ich Weg, Verzeichnis FileInfo-Objekten, kann aber nicht scheinen, nichts zu finden.
Ich schaute auch für vorhandene Fragen, aber konnte Sie nicht finden, was ich Suche.
InformationsquelleAutor der Frage Stack Overflow Nazi Hater | 2010-01-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind einige code-Beispiele:
All die Magie leitet sich von einem Windows-Funktion:
Beispiel-Aufruf:
InformationsquelleAutor der Antwort Mike Marshall
Dehnte ich auf ibram Antwort und erstellt diese Klasse (die aktualisiert wurde per Kommentar feedback). Ich habe wahrscheinlich mehr dokumentiert, aber es sollte selbsterklärend sein.
InformationsquelleAutor der Antwort Vermis
Ich kann mich nicht erinnern wo ich das gefunden, aber es funktioniert ohne p/invoke. Es ist das, was erneut gepostet vor.
den Sie verweisen müssen System.Management.dll:
code:
InformationsquelleAutor der Antwort ibram
Habe ich geschrieben eine Methode dafür. Es gibt einen UNC-Pfad, wenn Sie ein zugeordnetes Laufwerk, sonst gibt es den Pfad unverändert.
BEARBEITEN
Können Sie jetzt mit der Methode auch schon mit UNC-Pfade. Die obige version der Methode eine Ausnahme auslöst, wenn da ein UNC-Pfad.
InformationsquelleAutor der Antwort cramopy
Ich denke, Sie können verwenden Sie die "Netzwerk" - Taste Aus dem "Aktuellen Benutzer" Hive In der Registry.
Die Zugeordneten Laufwerke Aufgelistet Sind Dort Mit Ihren Freigegebenen Pfad Auf Dem Server.
Wenn es kein zugeordnetes Laufwerk in das system, es gibt also keine "Netzwerk" - Taste In Der "Aktuelle Benutzer" - Struktur.
Nun, ich bin mit diesem Weg, keine externe dll oder irgendetwas anderes.
InformationsquelleAutor der Antwort eFarzad
Konnte ich nicht replizieren ibram ist oder Vermis' Antwort wegen dem problem, das ich erwähnte in einem Kommentar unter Vermis " Antwort, über eine typeninitialisierer Ausnahme.
Stattdessen entdeckte ich, ich könnte die Abfrage für alle Laufwerke, die derzeit auf dem computer und dann eine Schleife, etwa so:
Dies funktioniert für x64 Windows-7, für .NET 4. Es kann verwendet werden, im Falle, du bist immer, dass die Ausnahme, die oben erwähnt wurde.
Ich Tat dies mit den Sachen von MSDN und bits aus ibram ist oder Vermis' Antworten, aber es war ein bisschen schwer zu finden, konkrete Beispiele auf der MSDN-Website. Ressourcen:
MSDN : Win32_LogicalDisk-Klasse
MSDN : System.Management-namespace
MSDN : WMI-Abfragen Beispiel:
InformationsquelleAutor der Antwort Hydronium
QueryDosDevice übersetzt einen Laufwerkbuchstaben in den Weg, dass es expandiert.
Beachten Sie, dass die übersetzen ALLE Laufwerksbuchstaben, nicht nur diejenigen, die zugeordnet sind Netzwerk-verbindungen. Sie müssen schon wissen, welche Netzwerk-Pfade, oder analysieren Sie die Ausgabe, um zu sehen, welche Netzwerk.
Hier ist der VB-Signatur
Und C# in einer
InformationsquelleAutor der Antwort John Knoeller
Können Sie WMI, um die zu befragen, die Win32_LogicalDrive Sammlung auf Ihrem Computer. Hier ist ein Beispiel, wie es zu tun mit scripting. Ändern Sie diese über C# ist ziemlich gut erklärt, an anderen stellen.
Leicht modifiziert VB.NET code aus dem Artikel:
InformationsquelleAutor der Antwort Nick
Scheint es brauche ein P/Invoke: Konvertieren von einem zugeordneten Laufwerksbuchstaben auf einem Netzwerk-Pfad mit C#
Dieser Kerl baute eine verwaltete Klasse mit ihm zu beschäftigen: C# Map Network Drive (API)
InformationsquelleAutor der Antwort Rubens Farias
Können Sie auch die WMI verwenden, Win32_LogicalDisk, um alle Informationen, die Sie benötigen. verwenden der ProviderName aus der Klasse, um den UNC-Pfad.
InformationsquelleAutor der Antwort rerun
Ähnlich ibram Antwort mit ein paar änderungen:
InformationsquelleAutor der Antwort Loathing
Soweit Windows das kümmert, was benötigt wird, ist ein Aufruf an
WNetGetConnection
. Ich weiß nicht, der ein front-end für die, die in .NET, so müssen Sie rufen es über P/Invoke (zum Glück, es hat nur einen parameter, den P/Invoke-code ist nicht zu schrecklich).InformationsquelleAutor der Antwort Jerry Coffin
Diese post beschreiben, wie man den absoluten Pfad zu einem Laufwerk, das abgebildet wird, in einen lokalen Ordner?
Die Antwort ist:
InformationsquelleAutor der Antwort Carlos Liu