Zwei absolute pfade vergleichen

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Zwei absolute pfade vergleichen

    Hallo,

    ich möchte einen codeeditor programmieren und möchte eine hilfestellung zum Bilder einfügen bieten.
    Ist weiter auch kein Problem, bis auf, dass ich über den ofd nur absolute pfade bekomme(ist ja auch verständlich meinerseits).
    Nun habe ich mir überlegt, dass ich einfach den pfad der datei (z.B. Html file) mit dem pfad des bildes vergleiche und das alles wegfällt,
    welches bei beiden pfaden gleich ist, so das ich am ende den relativen pfad habe!

    Nun bräuchte ich nur hilfe, wie ich das ins coding umsetzen würde!

    Beispiel-Pfade:

    Quellcode

    1. C:\Users\Default\Desktop\Images\pic.jpg
    2. C:\Users\Default\Desktop\Index.html
    Ja, das sieht einfach aus, isses aber nicht. Ich hab damalne Lösung für beliebig viele Pfade. Also der Grundgedanke ist, die Länge zu finden, die die Pfade übereinstimmen

    VB.NET-Quellcode

    1. ''' <summary>ReturnValue -1 indicates different pathes with no common segment</summary>
    2. Public Shared Function GetCommonPathLength( _
    3. ByVal ParamArray Pathes() As String) As Integer
    4. Return GetCommonPathLength(DirectCast(Pathes, IEnumerable(Of String)))
    5. End Function
    6. ''' <summary>ReturnValue -1 indicates different pathes with no common segment</summary>
    7. Public Shared Function GetCommonPathLength( _
    8. ByVal FilesystemItems As IEnumerable(Of String)) As Integer
    9. With FilesystemItems.GetEnumerator
    10. If Not .MoveNext() Then Return -1
    11. Dim sCompare As String = .Current
    12. Dim CommonPathLength As New Extremum(Of Integer)(sCompare.Length)
    13. Dim sCurrent As String = ""
    14. While .MoveNext
    15. sCurrent = .Current
    16. With CommonPathLength
    17. .CheckNew(sCurrent.Length)
    18. Do Until String.Compare( _
    19. sCompare.Substring(0, .MinVal), _
    20. sCurrent.Substring(0, .MinVal), ignoreCase:=True) = 0
    21. .CheckNew(sCompare.LastIndexOf("\"c, .MinVal - 1, .MinVal))
    22. If .MinVal < 0 Then Return -1
    23. Loop
    24. End With
    25. End While
    26. If sCurrent = "" Then
    27. If File.Exists(sCompare) Then
    28. CommonPathLength.CheckNew(Path.GetDirectoryName(sCompare).Length)
    29. ElseIf Not Directory.Exists(sCompare) Then
    30. Throw New Exception(string.concat( _
    31. "GetCommonPathLength: Es wurde nur 1 Pfad übergeben. ", _
    32. "Er ist im Filesystem nicht vorhanden. ", _
    33. "Es kann nicht ermittelt werden, ob es sich um ein File oder um ein Directory handelt."))
    34. End If
    35. End If
    36. Return CommonPathLength.MinVal
    37. End With
    38. End Function

    Achjeh - und dann brauchste auch noch meine Extremum-Klasse, um überhaupt ein minimum festzustellen:

    VB.NET-Quellcode

    1. Public Class Extremum(Of T As IComparable)
    2. Private _MinVal As T
    3. Private _MaxVal As T
    4. Private _IsNew As Boolean
    5. Public Sub New(ByVal ParamArray Values() As T)
    6. Reset(Values)
    7. End Sub
    8. Public Function Reset(ByVal ParamArray Values() As T) As Extremum(Of T)
    9. _IsNew = True
    10. Return CheckNew(Values)
    11. End Function
    12. Public Function CheckNew(ByVal ParamArray Values() As T) As Extremum(Of T)
    13. For Each Val As T In Values
    14. If _IsNew Then
    15. _MinVal = Val
    16. _MaxVal = Val
    17. _IsNew = False
    18. ElseIf Val.CompareTo(_MinVal) < 0 Then
    19. _MinVal = Val
    20. ElseIf Val.CompareTo(_MaxVal) > 0 Then
    21. _MaxVal = Val
    22. End If
    23. Next
    24. Return Me
    25. End Function
    26. Public ReadOnly Property HasValue() As Boolean
    27. Get
    28. Return Not _IsNew
    29. End Get
    30. End Property
    31. Public ReadOnly Property MinVal() As T
    32. Get
    33. If _IsNew Then
    34. Throw New ArgumentOutOfRangeException("_MinVal", "didn't check any value")
    35. End If
    36. Return _MinVal
    37. End Get
    38. End Property
    39. Public ReadOnly Property MaxVal() As T
    40. Get
    41. If _IsNew Then
    42. Throw New ArgumentOutOfRangeException("_MaxVal", "didn't check any value")
    43. End If
    44. Return _MaxVal
    45. End Get
    46. End Property
    47. End Class 'Extremum(Of T As IComparable)


    Ja, ich glaub schon, man kanns vereinfachen - binnichaber grad zu faul für.