Die in einer ListBox angezeiten Dateien löschen

  • .NET (FX) 4.5–4.8
  • VB.NET

Es gibt 86 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    Die in einer ListBox angezeiten Dateien löschen

    Hallo
    ich hoffe mir kann jemand helfen.
    mir wird in einer ListBox der Inhalt eines Ordners angezeigt, diesen in der ListBox angezeigten Ordnerinhalt soll per Button gelöscht werden.
    Das habe ich versucht

    VB.NET-Quellcode

    1. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    2. Try
    3. My.Computer.FileSystem.DeleteFile(ListBox1)
    4. Catch ex As Exception
    5. MsgBox("Es ist ein Fehler aufgetreten !", MsgBoxStyle.Critical, "Fehler")
    6. End Try
    7. End Sub

    Gruß und Danke in voraus

    Edit by ~blaze~:
    *Thema verschoben*
    ich bin ein Anfänger, bitte habt Verständnis für meine Unwissenheit und eventuelle schlecht gestellte Fragen ?(

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

    Hier mein Code: :thumbsup:

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    4. Try
    5. System.IO.File.Delete(Me.ListBox1.SelectedItem.ToString) ' Vorsicht beim löschen!
    6. Catch ex As Exception
    7. MessageBox.Show(ex.Message, "Fehlermeldung")
    8. End Try
    9. End Sub
    10. End Class
    Visual Basic.NET 8o
    MS-SQL
    8o
    @knuepel Und hier meiner, hier werden, im Gegensatz zu @Cheffboss , alle Dateien gelöscht:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. For Each item In ListBox1.Items
    3. Try
    4. System.IO.File.Delete(item.ToString) ' Vorsicht beim löschen!
    5. Catch ex As Exception
    6. MessageBox.Show(ex.Message, "Fehlermeldung")
    7. End Try
    8. Next
    9. End Sub
    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!
    Erstmal ein dickes Dankeschön für eure Tips!!!
    Leider werden die Dateien nicht aus den Ordner gelöscht. Liegt es vielleicht an der Anzeige in der ListBox, ich lasse nur den File.Name anzeigen?.
    Hier mal der Code für die Auflistung in der ListBox

    Quellcode

    1. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    2. Dim dir As New DirectoryInfo("D:\" & comboTarget.SelectedItem)
    3. For Each file As FileInfo In dir.GetFiles
    4. Me.ListBox1.Items.Add(file.Name)
    5. Next
    6. End Sub



    Edit:
    Fehler gefunden, es war Aufgrund des nur angezeigten Dateiname ohne Pfad. Nachdem ich den Pfad mit anzeigen lasse wird mit dem Code vom RodFromGermany der Ordner geleert.

    Gibt es eine Möglichkeit, dass auch gelöscht wird, wenn nur der Dateiname angezeigt wird?
    ich bin ein Anfänger, bitte habt Verständnis für meine Unwissenheit und eventuelle schlecht gestellte Fragen ?(

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

    Du möchtest in det ListBox nur den Dateinamen anzeigen? Dann musst du mit DisplayMember und ValueMember arbeiten. Da werden dann in der ListBox nur Dateinamen angezeigt, im Hintergrund liegt der vollständige Pfad...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Da müßtest Du die Dateien mit ihrem Pfad quasi unsichtbar z.B: in einem Stringarray speichern, auf das vom gesamten Programm zugegriffen werden kann.
    Also speicher die Namen in Deiner Listbox und gleichzeitig die Namen mit dem Pfad in dem Array und wenn's an's löschen geht, greif' nicht auf die Listbox sondern auf das Array zu (vorsicht beim löschen !)

    knuepel schrieb:

    in der ListBox angezeigten Ordnerinhalt soll per Button gelöscht werden.



    Wenn du hier die komplette Listbox sauber haben möchtest, kannst du auch über Listbox1.Clear die Einträge raushauen.
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Schade das niemand IO.FileInfo oder IO.DirectoryInfo erwaehnt, was hier eigendlich verwendet werden sollte.

    Edit: Ups knuepel setzt ja schon DirectoryInfo ein, hab ich net gesehen X/ .

    ErfinderDesRades hat dazu mal aufklarenendes geschrieben:
    Keine Strings in die File-Listbox!
    And i think to myself... what a wonderfuL World!

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

    Acr0most schrieb:

    knuepel schrieb:

    in der ListBox angezeigten Ordnerinhalt soll per Button gelöscht werden.



    Wenn du hier die komplette Listbox sauber haben möchtest, kannst du auch über Listbox1.Clear die Einträge raushauen.

    Sorry, da habe ich mich nicht richtig ausgedrückt. Es soll nicht nur die Listbox sauber sein, sondern der Ordner Inhalt der in der Listbox angezeigt wird.
    ich bin ein Anfänger, bitte habt Verständnis für meine Unwissenheit und eventuelle schlecht gestellte Fragen ?(
    Ich habe jetzt mal versucht den Ordner direkt zu löschen, also unabhängig von den Einträgen der ListBox. Die Auswahl welchen Ordner geleert werden erfolgt über eine ComboBox In der ComboBox wird aber nur der Ordner Name angezeigt, also ohne Pfad.

    Nun habe ich das versucht, leider ohne Erfolg

    Quellcode

    1. ​Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    2. Try
    3. My.Computer.FileSystem.DeleteFile("D:\" & comboTarget.SelectedItem)
    4. Catch ex As Exception
    5. MsgBox("Es ist ein Fehler aufgetreten !", MsgBoxStyle.Critical, "Fehler")
    6. End Try
    7. End Sub


    liegt hier das selbe Problem vor?
    ich bin ein Anfänger, bitte habt Verständnis für meine Unwissenheit und eventuelle schlecht gestellte Fragen ?(
    Welchen Variablen Inhalt hat denn comboTarget.SelectedItem, wenn du dort nen BreakPoint setzt?

    Mal ins Blaue rein geraten: DeleteFile kann keinen Ordner(Folder) sondern nur Dateien(Files) löschen?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    knuepel schrieb:

    liegt hier das selbe Problem vor?
    Sieh Dir an, was Du löschen willst.
    Mach da eine MessageBox-Abfrage rein und Du wirst selbst sehen, was da stimmt oder nicht stimmt.
    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!
    @knuepel,

    mrMo hat dir doch bereits den richtigen Weg aufgezeigt.

    mrMo schrieb:

    Dann musst du mit DisplayMember und ValueMember arbeiten. Da werden dann in der ListBox nur Dateinamen angezeigt, im Hintergrund liegt der vollständige Pfad...


    Spoiler anzeigen

    C#-Quellcode

    1. private void LoadFolderContent(string path)
    2. {
    3. System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path);
    4. if (di.Exists) {
    5. listBox1.Items.Clear();
    6. listBox1.Items.AddRange(di.GetFiles());
    7. listBox1.DisplayMember = "Name"; // Ein FileInfo -Objekt verfügt über den öffentlichen Memeber Name, dieser repräsentiert den Dateinamen
    8. //listBox1.ValueMember = "FullName"; // Ein FileInfo -Objekt verfügt über den öffentlichen Memeber FullName, dieser repräsentiert den absoluten Pfad zur Datei
    9. }
    10. }
    11. private void DeleteFolderContent()
    12. {
    13. if (listBox1.Items.Count > 0) {
    14. foreach (System.IO.FileInfo fi in listBox1.Items)
    15. try {
    16. if (fi.Exists)
    17. fi.Delete();
    18. }
    19. catch (UnauthorizedAccessException ex) { /* Keine Zugriffsberechtigung */ }
    20. catch (Exception ex) { /* Fehler */ }
    21. LoadFolderContent("Pfad zum Ordner");
    22. }
    23. }

    Hallo Fakiz,

    kannst du mir bitte eine Seite nennen wo es beschrieben wird, oder kannst du es mir beschreiben wie ich deinen Quellcode einbauen muss?. Ich habe das noch nie gemacht.

    Gruß
    knuepel
    ich bin ein Anfänger, bitte habt Verständnis für meine Unwissenheit und eventuelle schlecht gestellte Fragen ?(
    Die Methoden LoadFolderContent(string) und DeleteFolderContent() kannst du ganz einfach in z.B. einem ButtonClick -Event aufrufen

    Aufruf

    VB.NET-Quellcode

    1. Private Sub Button_loadContent_Click(sender As Object, e As EventArgs) Handles Button_loadContent.Click
    2. Using fb As New FolderBrowserDialog()
    3. If fb.ShowDialog() = DialogResult.OK Then
    4. LoadFolderContent(fb.SelectedPath)
    5. End If
    6. End Using
    7. End Sub
    8. Private Sub Button_deleteContent_Click(sender As Object, e As EventArgs) Handles Button_deleteContent.Click
    9. DeleteFolderContent()
    10. End Sub



    Methoden

    VB.NET-Quellcode

    1. Private Sub LoadFolderContent(path As String)
    2. Dim di As New System.IO.DirectoryInfo(path)
    3. If di.Exists Then
    4. listBox1.Items.Clear()
    5. ListBox1.Items.AddRange(di.GetFiles())
    6. ListBox1.DisplayMember = "Name" ' Ein FileInfo -Objekt verfügt über den öffentlichen Memeber Name, dieser repräsentiert den Dateinamen
    7. 'listBox1.ValueMember = "FullName"; // Ein FileInfo -Objekt verfügt über den öffentlichen Memeber FullName, dieser repräsentiert den absoluten Pfad zur Datei
    8. End If
    9. End Sub
    10. Private Sub DeleteFolderContent()
    11. If listBox1.Items.Count > 0 Then
    12. For Each fi As System.IO.FileInfo In listBox1.Items
    13. Try
    14. If fi.Exists Then
    15. fi.Delete()
    16. End If
    17. Catch ex As UnauthorizedAccessException
    18. ' Keine Zugriffsberechtigung
    19. Catch ex As Exception
    20. ' Fehler
    21. End Try
    22. Next
    23. LoadFolderContent("Pfad zum Ordner")
    24. End If
    25. End Sub


    Super, das Anzeigen (nur der Dateiname) und das löschen funktioniert, DANKE dafür. Damit ich es auch verstehe, werde mich damit noch mehrmals befassen und einige Beispiele basteln.
    Nun noch eine Farge: kann ich statt der Load Button Lösung auch die schon in der Form befindliche ComboBox für das laden nutzen?, ich würde gerne das öffnen des Browser ersparen. Zu Not wäre eine weitere zweite ComboBox möglich. Oder kann ich die Browser Öffnung vorgeben?, damit meine ich, dass schon das richtige Laufwerk mit den richtigen Ordner geöffnet wird. So brauch nur der entsprechende Unterordner ausgewählt werden.
    ich bin ein Anfänger, bitte habt Verständnis für meine Unwissenheit und eventuelle schlecht gestellte Fragen ?(

    Fakiz schrieb:

    Auch die ComboBox verfügt über <code class="inlineCode">Displaymember</code> &amp; <code class="inlineCode">Valuemember</code>, somit kannst du im [tt<s>]SelectedIndexChanged</s>[/tt] <code class="inlineCode">SelectedValueChanged -Event</code> der ComboBox die Daten relativ einfach laden.


    Kann ich auch in der CombBox auch nur den Dateinamen anzeigen lassen, oder müssen die Einträge mit Pfad eingeben werden? Kannst du mir hierbei noch mal behilflich sein und mir den Quellcode geben?
    ich bin ein Anfänger, bitte habt Verständnis für meine Unwissenheit und eventuelle schlecht gestellte Fragen ?(
    Wie ich bereits geschrieben habe kannst du mittels DisplayMember nur die Dateinamen anzeigen lassen.

    Beispiel

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs)
    2. Using fb As New FolderBrowserDialog()
    3. If fb.ShowDialog() = DialogResult.OK Then
    4. comboBox1.DataSource = New DirectoryInfo(fb.SelectedPath).GetDirectories()
    5. comboBox1.DisplayMember = "Name"
    6. comboBox1.ValueMember = "FullName"
    7. End If
    8. End Using
    9. End Sub
    10. Private Sub comboBox1_SelectedIndexChanged(sender As Object, e As EventArgs)
    11. LoadFolderContent(DirectCast(comboBox1.SelectedItem, DirectoryInfo).FullName)
    12. End Sub
    13. Private Sub LoadFolderContent(path As String)
    14. Dim di As New System.IO.DirectoryInfo(path)
    15. If di.Exists Then
    16. listBox1.Items.Clear()
    17. listBox1.Items.AddRange(di.GetFiles())
    18. listBox1.DisplayMember = "Name"
    19. End If
    20. End Sub



    *Edit*
    Oder ohne das Casten, dass macht das ganze etwas schöner

    VB.NET-Quellcode

    1. Private Sub comboBox1_SelectedValueChanged(sender As Object, e As EventArgs)
    2. LoadFolderContent(comboBox1.SelectedValue.ToString())
    3. End Sub


    PS: Wenn du den SelectedValueChanged -Event verwendest fliegt der Event SelectedIndexChanged logischer weise raus.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Fakiz“ ()

    Hast du den Code von @Fakiz denn verstanden oder einfach nur kopiert? Das Funktioniert ungefähr genau so wie er oben mit der ListBox geschrieben hat. Statt ListBox1 halt die Combobox nehmen.

    VB.NET-Quellcode

    1. Private Sub LoadFolderContent(path As String)
    2. Dim di As New System.IO.DirectoryInfo(path)
    3. If di.Exists Then
    4. listBox1.Items.Clear()
    5. ListBox1.Items.AddRange(di.GetFiles())
    6. ListBox1.DisplayMember = "Name" ' Ein FileInfo -Objekt verfügt über den öffentlichen Memeber Name, dieser repräsentiert den Dateinamen
    7. 'listBox1.ValueMember = "FullName"; // Ein FileInfo -Objekt verfügt über den öffentlichen Memeber FullName, dieser repräsentiert den absoluten Pfad zur Datei
    8. End If
    9. End Sub

    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen