C# Entfernen Sie die Dateiendung aus string-Liste
Was mein Programm tut, ist im Grunde Listen von Dateinamen (einschließlich seiner Erweiterung) aus einem Verzeichnis in einer listbox. Es hat dann eine Sortier Funktion die sortiert die Liste strings in alphabetischer Reihenfolge.
Schließlich hat es eine binäre Suche-Funktion, die ermöglicht dem Benutzer bei der Eingabe eine beliebige Zeichenfolge, die das Programm dann vergleichen und zeigt die abgestimmten Ergebnisse in eine listbox.
Nun, alle diese Funktionen arbeiten perfekt, aber ich kann nicht scheinen, um entfernen Sie die Erweiterung aus einem Dateinamen nach einer Suche.
Beispielsweise in der scan-und Sortier-Teil listet die Dateinamen: Dateiname.mp3
Nun, was ich will, es zu tun, wenn die suchen-Schaltfläche geklickt wird, ist zu entfernen Sie die Datei-Erweiterung und zeigt nur den Dateinamen an.
private void buttonSearch_Click(object sender, RoutedEventArgs e)
{
listBox1.Items.Clear();
string searchString = textBoxSearchPath.Text;
int index = BinarySearch(list1, 0, list1.Count, searchString);
for (int n = index; n < list1.Count; n++)
{
//Removes file extension from last decimal point ''not working''
int i = list1[n].LastIndexOf(".");
if (i > 0)
list1[n].Substring(0, i);
//Adds items to list
if (list1[n].IndexOf(searchString, StringComparison.OrdinalIgnoreCase) != 0) break;
listBox1.Items.Add(list1[n]);
}
MessageBox.Show("Done");
}
- Pfad.GetFileNameWithoutExtension()
- Ich bin mir nicht sicher, wie Sie zu implementieren, dass in meinem code (siehe oben) habe ich bereits bearbeitet, die Datei-Namen in der string-Liste
- Verwenden Sie die statischen Operationen im System.IO.Path-Klasse zum Umgang mit Erweiterungen. GetExtension() oder GetFileNameWithoutExtension() in den Sinn kommt, Auch sollten Sie immer verwenden Sie { } bei if-Blöcken, auch wenn es nur eine Zeile ... Ihr ein if-block ist anders als der zweite ......
- Was verstehst du nicht genau? Pfad.GetFileNameWithoutExtension() ist Recht einfach.
- Sie wusste nicht, weisen Sie die sub-string Wert Liste1[n] = Liste1[n].Substring(0, i);
- Ich kann nicht glauben, dass ich übersehen! Es hat geklappt! 😀 vielen Dank 🙂
- Willkommen 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
Substring
- Methode gibt eine neue, frische Kopie der Zeichenfolge, kopiert aus der Quelle ein. Wenn Sie möchten, "schneiden Sie die Erweiterung aus", dann müssen Sie abrufen, was Teilstring zurück, und speichern Sie es irgendwo, d.h.:Jedoch, dies ist eine ziemlich seltsame Art und Weise um eine Erweiterung zu entfernen.
Erstens, die Verwendung von
Substring(0,idx)
ungerade ist, wie es ist einRemove(idx)
(link), die macht genau das:Aber, sencondly, es ist sogar besser Weg, es zu tun: die
System.IO.Path
- Klasse bietet Ihnen eine Reihe von gut geschrieben statischen Methoden, die, zum Beispiel, entfernen Sie die Erweiterung (edit: dies ist, was L-Drei vorgeschlagenen in den Kommentaren), mit der vollen Behandlung von Punkten und etc:Sehen MSDN-link
Es noch gibt eine Kopie und Sie haben noch zu speichern, das Ergebnis irgendwo!
C# ist so einfach, dass, wenn etwas dauert mehr als 2 Minuten, es gibt wohl eine Methode, für die es im Rahmen.
Versuchen, wie unten ite wird dir helfen....
Beschreibung : Dateiname ohne Erweiterung
Verwenden
Weg.GetFileNameWithoutExtension
Verwenden Pfad.GetFileNameWithoutExtension Methode. Ganz einfach denke ich.
http://msdn.microsoft.com/en-us/library/system.io.path.getfilenamewithoutextension.aspx
Nicht sicher, wie Sie Sie implementiert haben, Ihr Verzeichnis zu suchen, aber Sie können LINQ nutzen zu Ihrem Vorteil in diesen Situationen für eine saubere, einfach zu lesende code:
Wenn Sie .NET 4.0, Auflisten von Dateien scheint zu sein, eine überlegene Wahl über GetFiles. Aber es klingt auch wie Sie wollen, bekommen beide den vollen Datei-Pfad und name der Datei ohne extension. Hier ist, wie können Sie ein Wörterbuch, so dass Sie würde beseitigen Durchlaufen der Sammlung zweimal:
Einen Weg, dies zu tun, wenn Sie nicht über eine Datei-Pfad, eine Datei, die Namen