Ermillung eines UNC-Pfades - Problem bei Pfaden auf dem lokalen Rechner

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von HenryV.

    Ermillung eines UNC-Pfades - Problem bei Pfaden auf dem lokalen Rechner

    Moin!

    ich möchte UNC-Pfade ermitteln um Pfade zu vergleichen. Hierzu habe ich ein Snipsel gefunden unter: dotnet-snippets.de/snippet/ori…zlaufwerkes-ermitteln/940
    dotnet-snippets.de/snippet/unc-pfad-ermitteln/445
    Diesen habe ich geringfügig modifziert und der sieht jetzt wie folgt aus:

    VB.NET-Quellcode

    1. Friend Shared Function fnGetUncPath(ByVal strDriveLetter As String) As String
    2. Dim Result As String = ""
    3. Dim intRet As Integer
    4. Dim strRet As String = ""
    5. Dim Length As Integer = 260
    6. Dim strTemp As String = New String(" ", Length)
    7. If strDriveLetter.Length <= 2 Then Return strDriveLetter
    8. ' hier liegt schon vermutlich ein UNC vor!
    9. If strDriveLetter.Substring(0, 2) = "\\" Then Return strDriveLetter
    10. Dim PfadNoDriveLetter As String = strDriveLetter.Substring(2)
    11. Try
    12. intRet = WNetGetConnection(strDriveLetter.Substring(0, 1) & ":", strTemp, Length)
    13. strRet = strTemp.Substring(0, strTemp.IndexOf(Chr(0)))
    14. ' erweitert um den Teil hinter dem Laufwerksbuchstaben
    15. Result = strTemp.Substring(0, strTemp.IndexOf(Chr(0))) & PfadNoDriveLetter
    16. Catch EX As Exception
    17. MsgBox("unerwarteter Fehler beim Speichern!" & vbCrLf & "Fehler bei der Bestimmung des UNC-Pfades in fnGetUncPath!" & vbCrLf & _
    18. "Pfad: " & strDriveLetter & vbCrLf & _
    19. "intRet: " & intRet & vbCrLf & _
    20. "strRet: " & strRet & vbCrLf & EX.ToString, MsgBoxStyle.Critical, k_CompanyName)
    21. Result = strDriveLetter
    22. End Try
    23. Return Result
    24. End Function


    Das funktioniert auch insoweit - aber wenn ich zum Beispiel: c:\temp prüfen lasse, dann kommt es in folgender Zeile

    VB.NET-Quellcode

    1. Result = strTemp.Substring(0, strTemp.IndexOf(Chr(0))) & PfadNoDriveLetter


    zu einem Fehler mit der Meldung:



    Zu diesem Zeitpunkt ist dann strTemp ein Leerstring! Muss ja zum Fehler führen. .-)

    Kann mir einer sagen wie ich das ganze sicherer machen kann oder gibt es für diese Aufgabe ein "bessere" Funktion ?

    Gruß Jan

    PS: URL berichtigt !

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

    @jan99 2 Möglichkeiten:
    strTemp ist leer oder
    strTemp.IndexOf(Chr(0)) liefert -1 zurück, weil 0 nicht vorkommt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    mikeb69 schrieb:

    Bist du sicher dass das so stimmt ?

    VB.NET-Quellcode

    1. Chr(0)


    Gruss

    mikeb69


    Moin !

    ja, das stimmt!

    VB.NET-Quellcode

    1. strRet = strTemp.Substring(0, strTemp.IndexOf(Chr(0)))


    Ich habe nur die Result-Zeile ergänzt.

    Nur war das leider der falsche Link: https://dotnet-snippets.de/snippet/original-unc-pfad-eines-netzlaufwerkes-ermitteln/940


    Gruß Jan
    Ich würde den Wert die Variable intRet überprüfen.
    Falls die WNetGetConnection-Funktion scheitert, wird der Rückgabewert > 0 sein. siehe auch System Error Codes

    VB.NET-Quellcode

    1. intRet = WNetGetConnection(strDriveLetter.Substring(0, 1) & ":", strTemp, Length)
    2. If intRet > 0 Then Return strDriveLetter : Exit Function