[Visual Basic 2012] Pfad einer Datei ohne Dateinamen filtern...

...komplette Frage anzeigen

1 Antwort

Komm schon, das ist doch jetzt nicht so schwer. Einfach ein wenig den Kopf einschalten und nachdenken :D

Beim Pfad "C:\Musik\Lol.mp3" muss einfach nur alles bis zum '\'-Zeichen von hinten löschen. Nicht mehr, nicht weniger.

Beispiel: Ich habe eine Form: (siehe Link weiter unten bei "Ergebnis")

Das erste Textfeld heißt "txtKomplett" und das Zweite "txtOrdner".

Nun habe ich mit folgendem Code beim Klicken des Buttons den Pfad herausgefiltert:

    Dim pfadKomplett As String = txtKomplett.Text
    Dim pfadGefiltert As String = txtOrdner.Text

    pfadKomplett.Trim()
    pfadGefiltert = pfadKomplett.Remove(pfadKomplett.LastIndexOf("\"))
    txtOrdner.Text = pfadGefiltert + "\"

Das geht so: Zuerst werden mit "Trim()" alle eventuellen Leerzeichen vor und hinter der Eingabe gelöscht. Nun lösche ich alles ab einem bestimmten Index, den ich mit der Funktion "LastIndexOf()" herausfinde, indem ich nach dem letzten Vorkommen des "\"-Zeichens suche. Am Ende wird der gefilterte Pfad der Text-Eigenschaft des "txtOrdner"-Textfeldes zugewiesen - der gefilterte Pfad erscheint im zweiten Textfeld. Allerdings muss vorher noch ein '\'-Zeichen hinzugefügt werden, das hat mit dem Index zu tun, da wird ein Zeichen zuviel gelöscht. Ich könnte auch einfach dem Index genau 1 addieren.

Ergebnis: http://www.abload.de/img/dateipfadfilternergeby1j7p.jpg


Einfacher geht es mit folgendem Code:

    Dim pfadKomplett As String = txtKomplett.Text
    Dim pfadGefiltert As String = txtOrdner.Text

    pfadKomplett.Trim()
    pfadGefiltert = System.IO.Path.GetDirectoryName(pfadKomplett)
    txtOrdner.Text = pfadGefiltert + "\"

Hier passiert im Prinzip genau dasselbe, nur dass der Pfad ganz einfach schön automatisch mit einer Funktion gefiltert wird, die jedermann benutzen kann und auch die ganze Denkarbeit übernimmt. Nur muss am Ende wieder das "\"-Zeichen hinzugefügt werden, da es in der Funktion auch abgeschnitten wird.

In System.IO.Path gibt es übrigens noch eine ganze Reihe weiterer nützlicher Funktionen, wie zum Beispiel "Combine()", mit der automatisch zwei Pfade aneinander gereiht werden, mit Berücksichtigung von Backslash (), was bei einfachem aneinanderhängen von zwei Strings nicht gemacht wird.

Allgemein lohnt es sich, in System.IO reinzuschauen, da es dort viel gibt, was einem die Arbeit abnimmt.

Ich hoffe, ich konnte dir helfen :)

Ein Stern wäre nett, wenn du willst :D

Die Erklärungen sind soweit richtig, die Code-Umsetzung allerdings nicht so toll.

pfadKomplett.Trim() bewirkt in deinem Beispiel gar nichts, da es die bearbeitete Zeichenkette zurückgibt. Es müsste daher pfadKomplett = pfadKomplett.Trim() heißen.

Die Verwendung der zweiten TextBox, die lediglich als Datencontainer gebraucht wird, könnte suggerieren, dass es die richtige Variante wäre, was schlichtweg falsch wäre. Steuerelemente sind nicht da, um Daten zu speichern. Daher explizit die Anmerkung, dass der gezeigte Code nur Demonstrationszwecke erfüllt.

Ansonsten gute Antwort.

1
@CrystalixXx

Oh, dann hat man wohl doch gemerkt, dass ich mich das letzte Mal vor einem halben Jahr mit VB intensiv beschäftigt habe... :D

Naja, ich muss halt erst mal wieder richtig da rein kommen...

0
@CrystalixXx

Aber eigentlich hätte doch MS VB Express Edition da mindestens einen Hinweis bzw. eine gekringelte Linie anzeigen müssen, weil normalerweise ein Rückgabewert auch verwendet werden muss - normalerweise wird das doch angezeigt...

Und das mit dem Fenster hat schon alles seine Richtigkeit - ich wollte, dass man bei dem Programm oben einen zu filternden Pfad einfügt, dann auf den Button klickt, und unten dann wieder den gefilterten Pfad in die Zwischenablage kopieren kann und weiterverwenden kann.

Sonst würde das Programm ja gar keinen Sinn ergeben...

0
@GuteFrage770

Visual Studio markiert solche Zeilen mit dem Hinweis (oder der Fehlermeldung - je nach Einstellung), dass der Rückgabewert nicht verwendet wird. Wie du schon erwähntest. Das ist richtig.

Natürlich ergäbe das Programm dann keinen Sinn. Das hält Anfänger nicht davon ab solchen Code zu schreiben. Es gibt tatsächlich solche, die auf der Form unsichtbare TextBox-Elemente platzieren, die dann als Datencontainer dienen. Dass man das so nicht machen sollte, interessiert viele dabei gar nicht, solange es funktioniert ... Leider.

1
@CrystalixXx

Hmmm stimmt - das würde ja dann zusätzliche Ressourcen verbrauchen.

Aber so ist es doch auch gut - so muss er zumindest mal mitdenken und kann nicht einfach mit Copy-Paste den Code einfach übernehmen.

Aber ich hatte sogar schon Bücher in der Hand, die einem genau sowas zeigen und empfehlen - dass man die TextBox dann einfach "Visible = false" setzt und die TextBox zum Speichern von Informationen benutzt...

Naja und ich muss zugeben - es gibt bessere Namen für TextBox-Komponenten und Variablen in diesem Fall. Aber ich wollte auch kein ultra-komplexes Programm schreiben, sondern einfach nur ganz kurz ein kleines Beispiel in unter 5min.

0
@GuteFrage770

WTF !? Ich wusste gar nicht das jemand geantwortet hat, hab das Problem kurz nach Fragestellung selbst gelöst...Trotzdem danke XDD

Und einen Stern kann ich dir nicht geben weils die Option iwie nicht gibt :/ Also da oben steht das garnicht ,wo das sonst immer steht...

0

Was möchtest Du wissen?