Von Listbox Item eine Bestimmte Datei kopieren

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Hug0w.

    Von Listbox Item eine Bestimmte Datei kopieren

    Halli Halloooo :)
    Also erstmal habe ich eine Frage es geht darum Ich habe eine ListBox so mit einen Button öffne ich die OpenFiledialog kann Dateien einfügen klappt alles wunderbar :)
    so das Problem ist ich will die Datei wo ich ich in die Listbox hinzugefügt habe Eine Kopie haben also das wenn ich einen anderen Button klicke die Datei wo ausgewählt ist oder mehrere variierbar sich zbs C:\BACKUP Speichert also so gesagt wenn die Dateien mal so plötzlich verschwinden :D eine Kopie habe und ich hab keine Losung ich weiß nicht ob hier schon so ein ähnlicher Thread gemacht wurde aber Trotz schon mal vor Danke fürs Helfen
    Lg Hug0w
    Halli Halloooo :)
    Hi :)

    Also erstmal habe ich eine Frage es geht darum Ich habe eine ListBox so
    mit einen Button öffne ich die OpenFiledialog kann Dateien einfügen
    klappt alles wunderbar :)
    Supi Frage :D

    so das Problem ist ich will die Datei wo ich ich in die Listbox
    hinzugefügt habe Eine Kopie haben also das wenn ich einen anderen Button
    klicke die Datei wo ausgewählt ist oder mehrere variierbar sich zbs
    C:\BACKUP Speichert also so gesagt wenn die Dateien mal so plötzlich
    verschwinden :D
    eine Kopie habe und ich hab keine Losung ich weiß nicht ob hier schon
    so ein ähnlicher Thread gemacht wurde aber Trotz schon mal vor Danke
    fürs Helfen
    Ist nur schwer zu verstehen, aber ich gebe mein Bestes..

    VB.NET-Quellcode

    1. Option Strict On
    2. ' Ich nehme einfach mal stumpf an, dass wir ein Button und eine ListBox in einer Form haben.
    3. Imports System.IO
    4. Imports System.Threading
    5. Imports System.Windows.Forms
    6. Public Class Form1
    7. Private selectedItem As String
    8. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    9. selectedItem = ListBox1.SelectedItem.ToString 'Schreibt ausgewaehltes XX in Variable "selectedItem"
    10. End Sub
    11. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    12. Dim openFile As OpenFileDialog = New OpenFileDialog ' Deklariert neues Dialog (Mache ich persoenlich immer so)
    13. Dim fileName As String
    14. Dim safeFileName As String
    15. openFile.Title = "Select a File..."
    16. openFile.Filter = "All Files|*.*"
    17. If openFile.ShowDialog = DialogResult.OK Then 'Oeffnet das Dialog und wartet auf das OK
    18. fileName = openFile.FileName
    19. safeFileName = openFileSafeFileName
    20. If Not Directory.Exists("C:\Backup_Of_" & safeFileName) Then ' Ueberprueft ob es ein Verzeichnes mit dem Namen da gibt (Siehe String)
    21. Directory.Create("C:\Backup_Of_" & safeFileName)
    22. End If
    23. Thread.Sleep(3000)
    24. File.WriteAllBytes("C:\Backup_Of_" & safeFileName, fileName) ' Kopiert die original Datei in Backup-Verzeichnis
    25. Thread.Sleep(3000)
    26. File.WriteAllText(fileName, selectedItem) ' Schreibt die ausgewaehlte XX in die Datei...
    27. MessageBox.Show("The file was over-written. A backup file can be found at: C:\Backup_Of_" & safeFileName, "Programm XXYY", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
    28. End Sub
    29. End Class


    Dieser Code hat absolut keinen Wert und keine Gewaehr, da ich ihn ohne Editor (Visual Studio) geschrieben habe!

    Ich hoffe aber, dass es dich weiterhilft.

    Hug0w schrieb:

    ich will die Datei wo ich ich in die Listbox hinzugefügt habe Eine Kopie haben
    Kannst Du das ganze mal etwas genauer beschreiben?
    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!
    ER will auch wenn er mehrere Items makiert im Multiselect diese Kopieren .

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. 'file
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
    6. Dim stFilePathAndName As String = OpenFileDialog1.FileName
    7. Dim MyFile As IO.FileInfo = New IO.FileInfo(stFilePathAndName)
    8. ListBox1.Items.Add(MyFile)
    9. End If
    10. End Sub
    11. 'folder
    12. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    13. If Me.FolderBrowserDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    14. Dim FileDirectory As New IO.DirectoryInfo(FolderBrowserDialog1.SelectedPath)
    15. Dim FilesFromDirectory As IO.FileInfo() = FileDirectory.GetFiles()
    16. For Each File As IO.FileInfo In FilesFromDirectory
    17. ListBox1.Items.Add(File.FullName)
    18. Next
    19. End If
    20. End Sub
    21. 'copy
    22. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    23. For i As Integer = 0 To ListBox1.Items.Count - 1
    24. My.Computer.FileSystem.CopyFile(ListBox1.SelectedItems(i).ToString, "C:\Backup" & IO.Path.GetFileName(ListBox1.SelectedItems(i).ToString), True)
    25. Next
    26. End Sub
    27. 'Multiselect on / Off
    28. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    29. If Me.ListBox1.SelectionMode = SelectionMode.One Then
    30. Button4.Text = "Off"
    31. Me.ListBox1.SelectionMode = SelectionMode.MultiSimple
    32. Else
    33. Button4.Text = "On"
    34. Me.ListBox1.SelectionMode = SelectionMode.One
    35. End If
    36. End Sub
    37. 'Selecktedt Auswahl mit rechter Maustaste aufheben
    38. Private Sub FileListBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
    39. If e.Button = Windows.Forms.MouseButtons.Right Then
    40. ListBox1.SelectedIndex = ListBox.NoMatches
    41. End If
    42. End Sub
    43. End Class
    44. 'http://www.vb-paradise.de/programmieren/hauptforum/94674-von-listbox-item-eine-bestimmte-datei-kopieren/?highlight=


    Bei Bedarf:
    Alle makierten Dateien aus ListBox Löschen.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. For i As Integer = ListBox1.Items.Count To 0 Step -1
    2. If ListBox1.SelectedIndices.Contains(i) = True Then
    3. My.Computer.FileSystem.DeleteFile(ListBox1.Items(i).ToString ) : ListBox1.Items.RemoveAt(i)
    4. End If
    5. Next


    LG Andre... ^^

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „TVX“ ()

    @TVX

    Und Du hast es immer noch nicht begriffen, dass in eine ListBox keine Strings reingehören. Ehrlich, ich hab mich gefreut, als ich in Deinem Code FileInfo gelesen hab. Ich dacht mir noch, na endlich lernt er auch was dazu und dann das da:

    VB.NET-Quellcode

    1. Me.ListBox1.Items.Add(File.FullName


    Macht mich echt ein bisschen traurig ;(
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    @TVX
    Eine List(of FileInfo) mit Listbox1.Datasource=dieListe an die Listbox binden. Listbox1.DisplayMember="FullName" (oder was auch immer) und fertig (Alternativ bei eigenen Klassen die .ToString-Methode überschreiben). Dann brauchst du die Listbox nur noch zur Anzeige - arbeiten kannst du direkt mit den Daten in der Liste.

    lg
    Das Problem bei einer List(Of) ist, dass man sich um die Aktualisierung kümmern muss (zumindest hat er es bei mir nicht selbst gemacht).
    Abhilfe schafft eine BindingList
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.ComponentModel
    3. Public Class Form1
    4. Private _bind As New BindingList(Of FileInfo)
    5. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    6. Using fbd As New FolderBrowserDialog
    7. If fbd.ShowDialog = Windows.Forms.DialogResult.OK Then
    8. _bind.Clear()
    9. For Each item In New DirectoryInfo(fbd.SelectedPath).GetFiles()
    10. _bind.Add(item)
    11. Next
    12. ListBox1.DataSource = _bind
    13. ListBox1.DisplayMember = "FullName"
    14. End If
    15. End Using
    16. End Sub
    17. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    18. For Each item In _bind
    19. File.Copy(item.FullName, Path.Combine("C:\Backup\", item.Name))
    20. Next
    21. End Sub
    22. End Class


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

    @fichz

    Danke,
    Kleine Anmerkung: Du hast eine BindingList(Of FileInfo) und die FileInfo-Klasse hat die Methode CopyTo.

    Bestimmt Verbesserungswürdig, aber hier:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.ComponentModel
    3. Public Class MainWindow
    4. Public Files As BindingList(Of FileInfo)
    5. Public Sub New()
    6. InitializeComponent()
    7. Files = New BindingList(Of FileInfo)
    8. listBoxFiles.SelectionMode = SelectionMode.MultiExtended
    9. End Sub
    10. Private Sub buttonAdd_Click(sender As Object, e As EventArgs) Handles buttonAdd.Click
    11. Using ofd As New OpenFileDialog() With {.Multiselect = True}
    12. If ofd.ShowDialog() <> DialogResult.OK Then Return
    13. For Each fi In ofd.FileNames
    14. Files.Add(New FileInfo(fi))
    15. Next
    16. End Using
    17. listBoxFiles.DataSource = Files
    18. End Sub
    19. Private Sub buttonBackUp_Click(sender As Object, e As EventArgs) Handles buttonBackUp.Click
    20. Using fbd As New FolderBrowserDialog()
    21. If fbd.ShowDialog() <> DialogResult.OK Then Return
    22. Dim dir As New DirectoryInfo(fbd.SelectedPath)
    23. If Not dir.Exists Then
    24. dir.Create()
    25. Else
    26. For i = 0 To listBoxFiles.SelectedIndices.Count - 1
    27. Try
    28. Files(i).CopyTo(Path.Combine(dir.FullName, Files(i).Name), True)
    29. Catch ex As UnauthorizedAccessException
    30. End Try
    31. Next
    32. End If
    33. End Using
    34. End Sub
    35. End Class