Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

UNC-Pfad ermitteln

165 views
Skip to first unread message

Bodo Jäger

unread,
Feb 14, 2006, 4:18:28 AM2/14/06
to
Hallo,
wie kann ich für einen gemappten Netzwerkpfad den zugehörigen UNC-Pfad
ermitteln?
Beispiel: H:\temp.txt
gewünschtes Ergebnis: \\Server1\Freigabe1\Ordner1\temp.txt

Bodo


Thomas Scheidegger [MVP]

unread,
Feb 14, 2006, 5:00:33 AM2/14/06
to
Hallo Bodo


> wie kann ich für einen gemappten Netzwerkpfad den zugehörigen UNC-Pfad
> ermitteln? Beispiel: H:\temp.txt
> gewünschtes Ergebnis: \\Server1\Freigabe1\Ordner1\temp.txt


vermutlich nur per PInvoke,
Win32 WNetGetUniversalName
http://msdn.microsoft.com/library/en-us/wnet/wnet/wnetgetuniversalname.asp

Bsp etwa wie:
http://groups.google.de/group/microsoft.public.dotnet.framework.interop/msg/6ae7a0083cf7915c

--
Thomas Scheidegger - MVP .NET - 'NETMaster'
http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/


Andreas Schmidt

unread,
Feb 14, 2006, 8:11:51 AM2/14/06
to
Hallo Bodo,

"Bodo Jäger" <bodo....@weinig.de> schrieb im Newsbeitrag
news:eQjSfeU...@TK2MSFTNGP11.phx.gbl...

ich mach's so:

Public Function Local2UNC(ByVal PathName As String) As String
'Option Compare Text einstellen
'
Dim PathArray() As String = PathName.Split(":\")
Dim allDrives() As DriveInfo = DriveInfo.GetDrives()

Local2UNC = PathName
Dim d As DriveInfo
For Each d In allDrives
If d.Name = PathArray(0) & ":\" AndAlso d.DriveType =
DriveType.Network Then
Dim RegKey As String
RegKey = "HKEY_CURRENT_USER\Volatile Environment"
If My.Computer.Registry.GetValue(RegKey, "HOMEDRIVE",
Nothing) = PathArray(0) & ":" Then
Return My.Computer.Registry.GetValue(RegKey,
"HOMESHARE", Nothing) & "\" & PathArray(1)
Else
RegKey = "HKEY_CURRENT_USER\NetWork\" & PathArray(0)
Return My.Computer.Registry.GetValue(RegKey,
"RemotePath", Nothing) & "\" & PathArray(1)
End If
End If
Next

End Function

Gruß
Andreas

Bodo Jäger

unread,
Feb 15, 2006, 3:10:27 AM2/15/06
to
Hallo Andreas,
deine Routine funktioniert in unserem Netzwerk leider nicht mit allen
Laufwerken (frag mich nicht warum, aber in der Reg stehen einige Mappings
nicht drin).

Ich hab jetzt, aufgrund des Links von Thomas, folgende Funktion:

Imports System.Text
Imports System.Runtime.InteropServices

Module UNC

<DllImport("mpr.dll", SetLastError:=False, CharSet:=CharSet.Auto)> _
Function WNetGetConnection( _
ByVal localName As String, _
ByVal remoteName As StringBuilder, _
ByRef remoteSize As Int32) As Int32
End Function

Public Function UNC_Pfad(ByVal Pfad)
Try
Dim sb As New StringBuilder(300)
Dim sb2 As New StringBuilder
sb2.Append(Pfad)

Dim size As Int32 = sb.Capacity
Dim Laufwerk As String = Split(Pfad, "\")(0)
WNetGetConnection(Laufwerk, sb, size)

Dim UNC As String = sb.ToString
sb2.Replace(Laufwerk, UNC)

Return sb2.ToString
Catch ex As Exception
Throw ex
End Try
End Function

End Module

Bodo

Thomas Scheidegger [MVP]

unread,
Feb 15, 2006, 5:39:41 AM2/15/06
to
> deine Routine funktioniert in unserem Netzwerk leider nicht mit allen
> Laufwerken (frag mich nicht warum, aber in der Reg stehen einige Mappings
> nicht drin).


nur eine Vermutung,
Windows Logon-Scripts (Batch) können oft auch Mappings erstellen.
(Kommandozeile: net use ... )
oder evtl. ab Server via ActiveDirectory Policy o.ä.

0 new messages