Dateipfad kürzen?? Substring etc. ???

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von SystemUnknow.

    Dateipfad kürzen?? Substring etc. ???

    Hallo Zusammen...
    Meine Anwendung ließt unterschiedliche Dateipfade aus wie z.B:

    Quellcode

    1. C:\Lokaler Datenträger\Eigene Musik\Party Musik\


    Es ist nicht festgelegt wie der Dateipfad lautet, d.h. im letzten Abschnitt steht nicht immer "Party Musik"... Es ist allerdings immer der Pfad zu einem Ordner...
    jetzt möchte ich immer den letzten Teil weg nehmen wenn ich auf einen Button klicke...
    heisst es soll der Makierte Bereich weg geschnitten werden: C:\Lokaler Datenträger\Eigene Musik\Party Musik\

    Wie mache ich das? Da sich der Pfad immer ändert kann ich ja nicht mit einem Substring arbeiten?
    Bitte helft mir...
    IO.Path kann doch schon mal nicht sein... Es gehts hier nicht um einen Dateipfad sondern um einen String der so aufgebaut ist wie ein Dateipfad... Der letzte Teil muss anhand des Strings gekürzt werden... Ein ordner im Datei System existiert NICHT!!
    Quick & dirty wenn ich es richtig verstehe (Wobei das eig gar kein Sinn ergibt):

    Quellcode

    1. Dim str As String = "C:\Lokaler Datenträger\Eigene Musik\Party Musik\"
    2. Dim strArr() As String = str.Split("\")
    3. MsgBox(strArr(0) & "\" & strArr(1) & "\" & strArr(2) & "\")


    EDIT/

    Oder so?!

    Quellcode

    1. Dim str As String = "C:\Lokaler Datenträger\Eigene Musik\Party Musik"
    2. Dim strArr() As String = str.Split("\")
    3. Dim ende As String
    4. For i = 0 To strArr.Count - 2
    5. ende &= strArr(i).ToString & "\"
    6. Next
    7. MsgBox(ende)

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

    DrVisualBasic schrieb:

    IO.Path kann doch schon mal nicht sein... Es gehts hier nicht um einen Dateipfad sondern um einen String der so aufgebaut ist wie ein Dateipfad... Der letzte Teil muss anhand des Strings gekürzt werden... Ein ordner im Datei System existiert NICHT!!

    Wie wäre's, wenn Du die Hilfe zu der Funktion liest bzw. selber mal versuchst, die Methode anzuwenden anstatt irgendwelche Vermutungen anzustellen?
    xtts02. Ich brauch nicht vermuten... Deine Antwort ist nicht verwertbar gewesen... Einen IO Aufruf kann ich nicht gebrauchen wenn ich einen String auslesen will... Der Pfad hat nichts mit einer lokalen Begebenheit zu tun... Es gibt diesen Pfad nicht wirklich...

    VB.NET-Quellcode

    1. Dim Liste As New List(Of String)
    2. Dim Pfad As String = "c:\temp\pupsi"
    3. Liste.AddRange(Pfad.Split("\"))
    4. If Not Liste(Liste.Count - 1) = "" Then
    5. MessageBox.Show(Liste(Liste.Count - 1))
    6. Else
    7. MessageBox.Show(Liste(Liste.Count - 2))
    8. End If


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    DrVisualBasic schrieb:

    Es gibt diesen Pfad nicht wirklich...

    Das spielt keine Rolle, denn diese Methode operiert nur mit String, die "ähnlich" wie ein Pfad aufgebaut ist. Datei- bzw. Verzeichnis muss nicht existieren.
    Beispiel aus MSDN

    VB.NET-Quellcode

    1. Dim filepath As String = "C:\MyDir\MySubDir\myfile.ext"
    2. Dim directoryName As String
    3. Dim i As Integer = 0
    4. While filepath <> Nothing
    5. directoryName = Path.GetDirectoryName(filepath)
    6. Console.WriteLine("GetDirectoryName('{0}') returns '{1}'", _
    7. filepath, directoryName)
    8. filepath = directoryName
    9. If i = 1
    10. filepath = directoryName + "\" ' this will preserve the previous path
    11. End If
    12. i = i + 1
    13. End While
    14. 'This code produces the following output:
    15. '
    16. ' GetDirectoryName('C:\MyDir\MySubDir\myfile.ext') returns 'C:\MyDir\MySubDir'
    17. ' GetDirectoryName('C:\MyDir\MySubDir') returns 'C:\MyDir'
    18. ' GetDirectoryName('C:\MyDir\') returns 'C:\MyDir'
    19. ' GetDirectoryName('C:\MyDir') returns 'C:\'
    20. ' GetDirectoryName('C:\') returns ''

    DrVisualBasic schrieb:

    xtts02. Ich brauch nicht vermuten... Deine Antwort ist nicht verwertbar gewesen... Einen IO Aufruf kann ich nicht gebrauchen wenn ich einen String auslesen will... Der Pfad hat nichts mit einer lokalen Begebenheit zu tun... Es gibt diesen Pfad nicht wirklich...


    Blödsinn.
    Mit Io.Path kannst du Pfade oder auch URLs bearbeiten.
    Und wenn der Pfad als String vorliegt (was er für gewöhnlich tut) ...

    Testen, schämen:

    VB.NET-Quellcode

    1. MessageBox.Show(IO.Path.GetDirectoryName("C:\Root\FolderA\FolderB\DateiIrgendwas.txt"))
    2. 'oder
    3. Dim DirName As String = IO.Path.GetDirectoryName("C:\Root\FolderA\FolderB\DateiIrgendwas.txt")
    4. MessageBox.Show(DirName.Substring(0, DirName.LastIndexOf("\")))


    //

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

    Trotzdem ist die Methode mit der IO-Klasse besser, weils optimiert ist und einfacher zu verwenden.

    Bei einer eigenen Methode müsste man wieder mehr Zeilen programmieren um erdenkliche Fälle zu behandeln, wie wäre es z.B. mit deiner Methode wenn der Pfad so lautet:

    Quellcode

    1. C:\Root\FolderA\FolderB\


    Hierbei würde genau dieser Pfad zurückgegeben, da der \ das letzte Zeichen ist und SubString somit von Anfang bis zu diesem Zeichen ausgibt.

    @vanitas-mundi: Wieso antwortest du wenn du dne Thread nicht komplett ließt? Da könntest ja zu jedem Thread eine Antwort geben, ob sie scohn genannt wurde oder nicht ist dir ja anscheint egal wenn den Thread gar nicht richtig ließt. Das ist nicht Sinn der Sache, eine Antwort reicht und die wurde hier schon gegeben, zudem besser als deine Lösung mit den My-Namespace, der wenn möglich vermieden werden sollte.
    Hierbei würde genau dieser Pfad zurückgegeben, da der \ das letzte Zeichen ist und SubString somit von Anfang bis zu diesem Zeichen ausgibt.

    Meinst du jetzt mich? Dann irrst du. Mein Code macht was er soll. Sofern ich das richtig gelesen habe, soll FolderB aus dem Pfad entfernt werden. Da könnte auch "C:\Root\FolderA\FolderB\\\\\\\\" stehen haben, das interessiert net. ^^

    Wie schon gesagt, Testen...