Dateien aufzählen

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von GirlOnFire.

    Dateien aufzählen

    Hallo

    ich glaube ich nerve euch schon damit aber mir ist aufgefallen das er nicht alle Unterordner mit zählt.


    VB.NET-Quellcode

    1. Dim dirs() = New System.IO.DirectoryInfo(TextBox3.Text).GetDirectories("*.*")
    2. For Each di In dirs
    3. Try
    4. '...
    5. frm_form.Listbox1.Items.AddRange(di.GetFiles("*.bat", IO.SearchOption.AllDirectories))
    6. Catch ex As Exception
    7. End Try
    8. Next


    Wenn ich ein einzelnen Ordner nehme mit über 1000 Dateien drin zählt der Garnichts.... Aber wenn ich dann den Pfad eingebe, wo der Ordner sich befindet zählt er erst den Ordner mit den ganzen Dateien mit.

    2 Fragen.
    • Wie bekomme ich das hin, das wenn was in ein Unterorder und vielleicht wenn noch ein Unterordner im Unterordner ist, auflistet?
    • Wie bekomme ich das hin, das er auch ein einzelnen Ordner auslistet?

    Danke ich hoffe ihr versteht mich.
    Oh, hab ich schon. Damit hab ich Irgendwie Probleme mit 2 Codes.


    "EnumerateFiles" ist kein Member von "System.IO.DirectoryInfo".

    VB.NET-Quellcode

    1. files = dirinf.EnumerateFiles(pattern)

    "EnumerateDirectories" ist kein Member von "System.IO.DirectoryInfo".

    VB.NET-Quellcode

    1. recurse(dirinf.EnumerateDirectories)
    Machma dies:

    VB.NET-Quellcode

    1. Dim ll = New List(Of IO.FileInfo)
    2. ll.AddRange(New IO.DirectoryInfo(TextBox3.Text).GetFiles("*.bat", IO.SearchOption.AllDirectories))
    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!
    Framework! Danke. Nächstes Problem, bei ein Code Streitet er sich. Beim Löschen eines Items..


    Die Items-Auflistung kann nicht geändert werden, wenn die DataSource-Eigenschaft festgelegt ist.

    VB.NET-Quellcode

    1. Listbox1.Items.Remove(Listbox1.SelectedItem)
    Damit kann ich dann z.B

    VB.NET-Quellcode

    1. GetFilesAndFolders(TextBox3.Text)



    steuern aber nicht


    VB.NET-Quellcode

    1. Dim folders As New List(Of DirectoryInfo)
    2. Dim files As New List(Of FileInfo)



    oder?? Ich möchte das er bei "frm_main" das läd und wenn es fertig ist die Form öffnet. Wie ich es auch hatte.

    Danke
    Also der ganze Code von mir:


    VB.NET-Quellcode

    1. Public Sub CollectFilesAndFolders( _
    2. ByVal rootDirs As IEnumerable(Of DirectoryInfo), _
    3. ByVal folderCollector As ICollection(Of DirectoryInfo), _
    4. ByVal fileCollector As ICollection(Of FileInfo), _
    5. Optional ByVal pattern As String = "*.*")
    6. 'Vorrausdeklaration der rekursion
    7. Dim recurse As Action(Of IEnumerable(Of DirectoryInfo)) = Nothing
    8. 'rekursion ausprogrammieren
    9. recurse = _
    10. Sub(dirs As IEnumerable(Of DirectoryInfo))
    11. For Each dirinf In dirs
    12. Dim files As IEnumerable(Of FileInfo)
    13. Try
    14. files = dirinf.EnumerateFiles(pattern)
    15. Catch ex As UnauthorizedAccessException
    16. 'für manche Directories hat das Prog keine Rechte
    17. Continue For
    18. End Try
    19. For Each fileInf In files
    20. fileCollector.Add(fileInf)
    21. Next
    22. folderCollector.Add(dirinf)
    23. 'selbst-aufruf
    24. recurse(dirinf.EnumerateDirectories)
    25. Next
    26. End Sub
    27. 'rekursion aufrufen
    28. recurse(rootDirs)
    29. End Sub
    30. Public Sub GetFilesAndFolders(ByVal rootPath As String)
    31. Dim folders As New List(Of DirectoryInfo)
    32. Dim files As New List(Of FileInfo)
    33. Dim rootDirs = {New DirectoryInfo(rootPath)} 'rootDirs enthält hier nur 1 Directory
    34. CollectFilesAndFolders(rootDirs, folders, files, "*.bat")
    35. 'Collect-Ergebnisse verwenden
    36. frm_scannen.Listbox1.DataSource = folders
    37. frm_scannen.Listbox1.DataSource = files
    38. End Sub
    39. Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    40. GetFilesAndFolders(TextBox3.Text)
    41. frm_scannen.ShowDialog()
    42. End Sub


    Der anderen Form:

    VB.NET-Quellcode

    1. Private Sub Scnannen2()
    2. Dim auslesen As String
    3. Dim virenlist As String = My.Computer.FileSystem.ReadAllText(Appdata & "\virenlist.ini")
    4. Dim blacklist As String = My.Computer.FileSystem.ReadAllText(Appdata & "\Blacklist.ini")
    5. Dim igonorieren As String = Label6.Text = Label6.Text.Replace("Ignoierte: ", Nothing)
    6. Dim igonorierenzahl As String = igonorieren
    7. Dim durchsucht As String = Label5.Text = Label5.Text.Replace("Durchsuche Batch Dateien: ", Nothing)
    8. Dim durchsucht2 As String = durchsucht
    9. Dim fund As String = Label3.Text = Label3.Text.Replace("Funde: ", Nothing)
    10. Dim fund2 As String = durchsucht
    11. Listbox1.SelectedIndex = 0
    12. Label2.Text = Listbox1.GetItemText(Listbox1.SelectedItem)
    13. Label8.Text = "Pfad: " & Listbox1.GetItemText(Listbox1.SelectedItem)
    14. auslesen = Listbox1.GetItemText(Listbox1.SelectedItem)
    15. If blacklist.Contains(auslesen) Then
    16. Listbox1.SelectedIndex = 0
    17. Listbox1.Items.Remove(Listbox1.SelectedItem)
    18. igonorierenzahl = Val(igonorierenzahl) + Val(1)
    19. igonorieren = "Ignoierte: " & igonorierenzahl
    20. Label6.Text = igonorieren
    21. durchsucht2 = Label5.Text
    22. durchsucht2 = durchsucht2.Replace("Durchsuche Batch Dateien: ", Nothing)
    23. durchsucht2 = Val(durchsucht2) + Val(1)
    24. durchsucht = "Durchsuche Batch Dateien: " & durchsucht2
    25. Label5.Text = durchsucht
    26. Timer1.Start() : Exit Sub
    27. Else
    28. Try
    29. auslesen = My.Computer.FileSystem.ReadAllText(Listbox1.GetItemText(Listbox1.SelectedItem))
    30. Catch ex As Exception
    31. Listbox1.Items.Remove(Listbox1.SelectedItem)
    32. Timer1.Start()
    33. End Try
    34. Dim split() = auslesen.Split(" "c)
    35. If split.Contains("del") Then
    36. 'Hier bin ich noch nicht ganz Fertig!!!!
    37. Label7.Text = "Typ: Löschung einer Datei"
    38. frm_details.Label3.Text = "Typ: Löschung einer Datei"
    39. frm_details.Label5.Text = "Pfad: " + Label2.Text
    40. frm_details.RichTextBox1.Text = My.Computer.FileSystem.ReadAllText(Label2.Text)
    41. Listbox1.SelectedIndex = 0
    42. Listbox1.Items.Remove(Listbox1.SelectedItem)
    43. fund2 = Label3.Text
    44. fund2 = fund2.Replace("Funde: ", Nothing)
    45. fund2 = Val(fund2) + Val(1)
    46. fund = "Funde: " & fund2
    47. Label3.Text = fund
    48. Timer3.Start()
    49. My.Computer.Audio.Play(My.Resources.sound, AudioPlayMode.Background)
    50. durchsucht2 = Label5.Text
    51. durchsucht2 = durchsucht2.Replace("Durchsuche Batch Dateien: ", Nothing)
    52. durchsucht2 = Val(durchsucht2) + Val(1)
    53. durchsucht = "Durchsuche Batch Dateien: " & durchsucht2
    54. Label5.Text = durchsucht
    55. frm_details.ShowDialog()
    56. Else
    57. frm_center.GetFilesAndFolders(durchsucht)
    58. Listbox1.SelectedIndex = 0
    59. Listbox1.Items.Remove(Listbox1.SelectedItem)
    60. durchsucht2 = Label5.Text
    61. durchsucht2 = durchsucht2.Replace("Durchsuche Batch Dateien: ", Nothing)
    62. durchsucht2 = Val(durchsucht2) + Val(1)
    63. durchsucht = "Durchsuche Batch Dateien: " & durchsucht2
    64. Label5.Text = durchsucht
    65. End If
    66. End If
    67. Timer1.Start()
    68. End Sub


    Ich möchte ein kleinen AntiViren für Batchdateien machen. Alles ist noch nicht Fertig! Bei der ersten Form soll er einfach das laden weil es ein Center ist. Dann wenn es fertig ist soll sich das öffnen und dann einfach das machen was er machen soll. Mehr eigentlich nicht... Frag bitte nicht warum ich das mache xD und warum so der Code?!?! Danke

    Danke hoffentlich dass was du willst.
    Setze mal die Zweite Zeile aus "GetFilesAndFolders" an den Anfang der Form und ersetze "Dim" durch "Public", also:

    VB.NET-Quellcode

    1. Public files as List(Of FileInfo)

    und schreibe stattdessen in die Methode:

    VB.NET-Quellcode

    1. files = New List(Of FileInfo)


    Dann ersetze alle Vorkommen von

    VB.NET-Quellcode

    1. ListBox1.Items.Remove(ListBox1.SelectedItem)

    durch

    VB.NET-Quellcode

    1. Form1.files.Remove(ListBox1.SelectedItem)