Normalen systempfad überprüfen auf UNC

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von BiedermannS.

    Normalen systempfad überprüfen auf UNC

    Guten morgen :)


    ich habe folgendes Problem ich bekomme einen Normalen Pfad angegeben per drag&drop von einem xbeliebiegen ordner

    z.b. C:\Programme\VB-Paradise\

    nun möchte ich überprüfen ob dieses Verzeichniss freigegeben ist im netzwerk und wie der UNC Pfad Lauten würde für diesenpfad.

    kann mir jemand sagen wie ich des angehen kann? Habt ihr mir da evtl. einen leichten und effektiven lösungsweg?

    danke im vorraus :)

    lg
    Ah da hab ich wohl schneller geschrieben als ich gelesen habe :S

    ich schreibs nochmal neu :D

    Spoiler anzeigen
    Hier zwei Möglichkeiten (Nur Windows Pfadangaben):

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim pfad As String = "c:\test\"
    3. Dim pfad2 As String = "\\test\"
    4. MsgBox(IsUNC(pfad).ToString) 'False
    5. MsgBox(IsUNC(pfad2).ToString) 'True
    6. MsgBox(IsNotUNC(pfad).ToString) 'True
    7. MsgBox(IsNotUNC(pfad2).ToString) 'False
    8. End Sub
    9. Public Function IsUNC(ByVal Path As String) As Boolean
    10. If Path.StartsWith("\\") Then
    11. Return True
    12. Else
    13. Return False
    14. End If
    15. End Function
    16. Public Function IsNotUNC(ByVal Path As String) As Boolean
    17. If Path.Length >= 3 AndAlso Char.IsLetter(Path(0)) AndAlso String.Format("{0}{1}", Path(1), Path(2)) = ":\" Then
    18. Return True
    19. Else
    20. Return False
    21. End If
    22. End Function
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    So, jetzt aber das richtige.

    Wichtig: Es muss ein Verweis auf System.Management gesetzt werden.

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim SuchPfad As String = "c:\Test\"
    3. For Each pfad As Share In GetUNCFromPath(SuchPfad)
    4. MsgBox(pfad.UNCPath)
    5. Next
    6. End Sub
    7. ''' <summary>
    8. ''' Gibt Alle Freigaben mit dem entsprechenden Pfad zurück
    9. ''' </summary>
    10. ''' <param name="Path">Der Pfad nach dem gesucht wird</param>
    11. ''' <param name="ExactPath">Gibt an ob nach dem genauen Pfad gesucht wird</param>
    12. ''' <returns>Eine List(of Share) mit allen gefundenen Freigabenamen</returns>
    13. ''' <remarks></remarks>
    14. Public Function GetUNCFromPath(ByVal Path As String, Optional ExactPath As Boolean = True) As List(Of Share)
    15. Dim RetVal As New List(Of Share)
    16. Dim objClass As Management.ManagementClass = New Management.ManagementClass("\\localhost\root\cimv2:Win32_Share")
    17. For Each objShare As Management.ManagementObject In objClass.GetInstances()
    18. If (ExactPath AndAlso objShare.Properties("Path").Value.ToString.ToLower = Path.ToLower) OrElse (Not ExactPath AndAlso objShare.Properties("Path").Value.ToString.ToLower.Contains(Path.ToLower)) Then
    19. RetVal.Add(New Share With {.Name = objShare.Properties("Name").Value.ToString, .UNCPath = String.Format("\\{0}\{1}\", Environment.MachineName, objShare.Properties("Name").Value.ToString), .Path = Path})
    20. End If
    21. Next
    22. Return RetVal
    23. End Function
    24. Public Class Share
    25. Private _Name As String = String.Empty
    26. Private _UNCPath As String = String.Empty
    27. Private _Path As String = String.Empty
    28. Public Property Name As String
    29. Get
    30. Return _Name
    31. End Get
    32. Set(value As String)
    33. _Name = value
    34. End Set
    35. End Property
    36. Public Property UNCPath As String
    37. Get
    38. Return _UNCPath
    39. End Get
    40. Set(value As String)
    41. _UNCPath = value
    42. End Set
    43. End Property
    44. Public Property Path As String
    45. Get
    46. Return _Path
    47. End Get
    48. Set(value As String)
    49. _Path = value
    50. End Set
    51. End Property
    52. End Class
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BiedermannS“ ()

    Hi danke für die antworten.

    Der motzt bei der "Share Classe" bei mir rum


    Fehler 22 Eine Eigenschaft ohne einen ReadOnly- oder WriteOnly-Bezeichner muss ein "Get" und ein "Set" haben.
    Fehler 23 Eine Anweisung kann nicht innerhalb eines Eigenschaftentexts verwendet werden. Das Ende der Eigenschaft wird angenommen.
    Fehler 24 Eine Anweisung kann nicht innerhalb eines Eigenschaftentexts verwendet werden. Das Ende der Eigenschaft wird angenommen.
    Fehler 25 Eigenschaft ohne "End Property".

    lg
    Müsste eigentlich auch hinhauen:

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim SuchPfad As String = "C:\Test"
    3. For Each pfad As Share In GetUNCFromPath(False, SuchPfad)
    4. MsgBox(pfad.UNCPath & vbCrLf & "RootFolder: " & pfad.IsRoot.ToString)
    5. Next
    6. End Sub
    7. Public Function GetUNCFromPath(ExactPath As Boolean, ByVal ParamArray Paths() As String) As List(Of Share)
    8. Dim RetVal As New List(Of Share)
    9. Dim objClass As Management.ManagementClass = New Management.ManagementClass("\\localhost\root\cimv2:Win32_Share")
    10. Dim SharePath As String = String.Empty
    11. Dim ShareName As String = String.Empty
    12. For Each objShare As Management.ManagementObject In objClass.GetInstances()
    13. SharePath = objShare.Properties("Path").Value.ToString
    14. ShareName = objShare.Properties("Name").Value.ToString
    15. If Not String.IsNullOrEmpty(SharePath) AndAlso Not ShareName.Contains("$") Then
    16. For Each path In Paths
    17. If (ExactPath AndAlso SharePath.ToLower = path.ToLower) OrElse (Not ExactPath AndAlso SharePath.ToLower.Contains(path.ToLower)) Then
    18. RetVal.Add(New Share With {.Name = ShareName, .UNCPath = String.Format("\\{0}\{1}\", Environment.MachineName, ShareName), .Path = path, .IsRoot = True})
    19. ElseIf (ExactPath AndAlso path.ToLower.StartsWith(SharePath.ToLower)) OrElse (Not ExactPath AndAlso path.ToLower.Contains(SharePath.ToLower)) Then
    20. RetVal.Add(New Share With {.Name = ShareName, .UNCPath = String.Format("\\{0}\{1}\{2}", Environment.MachineName, ShareName, path.Replace(SharePath, "")), .Path = path, .IsRoot = False})
    21. End If
    22. Next
    23. End If
    24. Next
    25. Return RetVal
    26. End Function
    27. Public Class Share
    28. Private _Name As String = String.Empty
    29. Private _UNCPath As String = String.Empty
    30. Private _Path As String = String.Empty
    31. Private _IsRoot As Boolean
    32. Public Property IsRoot As Boolean
    33. Get
    34. Return _IsRoot
    35. End Get
    36. Set(value As Boolean)
    37. _IsRoot = value
    38. End Set
    39. End Property
    40. Public Property Name As String
    41. Get
    42. Return _Name
    43. End Get
    44. Set(value As String)
    45. _Name = value
    46. End Set
    47. End Property
    48. Public Property UNCPath As String
    49. Get
    50. Return _UNCPath
    51. End Get
    52. Set(value As String)
    53. _UNCPath = value
    54. End Set
    55. End Property
    56. Public Property Path As String
    57. Get
    58. Return _Path
    59. End Get
    60. Set(value As String)
    61. _Path = value
    62. End Set
    63. End Property
    64. End Class
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    funktioniert fast perfekt der code ich suche nur grad die stelle wo du dem unterverzeichnis das "\" gibst weil ich kriege dann meine freigabe mit "\\" im unterverzeichniss ansonsten 1a perfekt einfachsuper spitze :D danke!

    VB.NET-Quellcode

    1. Public Function GetUNCFromPath(ExactPath As Boolean, ByVal ParamArray Paths() As String) As List(Of Share)
    2. Dim RetVal As New List(Of Share)
    3. Dim objClass As Management.ManagementClass = New Management.ManagementClass("\\localhost\root\cimv2:Win32_Share")
    4. Dim SharePath As String = String.Empty
    5. Dim ShareName As String = String.Empty
    6. For Each objShare As Management.ManagementObject In objClass.GetInstances()
    7. SharePath = objShare.Properties("Path").Value.ToString
    8. ShareName = objShare.Properties("Name").Value.ToString
    9. If Not String.IsNullOrEmpty(SharePath) AndAlso Not ShareName.Contains("$") Then
    10. For Each path In Paths
    11. If (ExactPath AndAlso SharePath.ToLower = path.ToLower) OrElse (Not ExactPath AndAlso SharePath.ToLower.Contains(path.ToLower)) Then
    12. RetVal.Add(New Share With {.Name = ShareName, .UNCPath = String.Format("\\{0}\{1}\", Environment.MachineName, ShareName), .Path = path, .IsRoot = True})
    13. ElseIf (ExactPath AndAlso path.ToLower.StartsWith(SharePath.ToLower)) OrElse (Not ExactPath AndAlso path.ToLower.Contains(SharePath.ToLower)) Then
    14. 'hier war der Fehler
    15. RetVal.Add(New Share With {.Name = ShareName, .UNCPath = String.Format("\\{0}\{1}{2}", Environment.MachineName, ShareName, path.Replace(SharePath, "")), .Path = path, .IsRoot = False})
    16. End If
    17. Next
    18. End If
    19. Next
    20. Return RetVal
    21. End Function
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D