System Volume Information erscheint bei Dateisuche

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von Cheffboss.

    @RodFromGermany
    Da ich noch Kunden mit Windows 2000 habe. ^^
    Und deshalb muss ich dieses ältere .NET Framework 2.00 verwenden!

    edit2:
    @ErfinderDesRades
    Danke, für deinen Hinweis.
    Ich habe den Gesprächsverlauf sorgfältiger gelesen.
    In Zukunft versuche ich noch genauer zu antworten.
    Es gab zwei Codes der 1te. und der 2.te.
    Bei einem (ersten) lief das Programm weiter….
    Beim anderen(zweiten) gab es einen Abbruch…
    Mein Satz „Aber dies ist nun egal.“. :thumbup:
    War nicht böse gemeint!
    Ich bin sehr froh hier Hilfe zu bekommen.
    Mit diesem Satz meine ich nur, dass es keinen Sinn mehr hat,
    weiter über den schlechten Codes zu diskutieren!
    Da dieses sowieso quatsch war.
    Und Ersetzt werden muss!
    Visual Basic.NET 8o
    MS-SQL
    8o

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Cheffboss“ ()

    hm gut filter müssteste noch einbauen, so sollts aber auf jeden fall kalppen:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class frmA
    2. Private Sub btnGo_Click(sender As Object, e As EventArgs) Handles btnGo.Click
    3. Dim SearchPath As String = txbPfad.Text
    4. Dim Filter As String = txb_Filter.Text
    5. ListBox1.Items.Clear()
    6. ListBox1.Refresh()
    7. Dim subfolders As List(Of String) = GetDirectories(SearchPath)
    8. Dim Filelist As New List(Of String)
    9. For Each Item In subfolders
    10. Dim TempFlList As List(Of String) = GetFiles(Item)
    11. For Each fl As String In TempFlList
    12. Filelist.Add(fl)
    13. Next
    14. Next
    15. For Each Item As String In Filelist
    16. ListBox1.Items.Add(Item)
    17. Next
    18. End Sub
    19. Public Function GetFiles(ByVal path As String) As List(Of String)
    20. Dim sFiles As New List(Of String)
    21. Try
    22. For Each fl As String In IO.Directory.GetFiles(path)
    23. Try
    24. sFiles.Add(fl)
    25. Catch ex As Exception
    26. End Try
    27. Next
    28. Catch ex As Exception
    29. End Try
    30. Return sFiles
    31. End Function
    32. Public Function GetDirectories(ByVal path As String) As List(Of String)
    33. Dim subfolders As New List(Of String)
    34. For Each subfolder As String In IO.Directory.GetDirectories(path)
    35. subfolders.Add(subfolder)
    36. Try
    37. subfolders.AddRange(GetDirectories(subfolder))
    38. Catch ex As UnauthorizedAccessException
    39. End Try
    40. Next subfolder
    41. Return subfolders
    42. End Function
    43. Private Sub btnPfad_Click(sender As Object, e As EventArgs) Handles btnPfad.Click
    44. fbdPfad.ShowDialog()
    45. txbPfad.Text = fbdPfad.SelectedPath
    46. End Sub
    47. End Class
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Cheffboss schrieb:

    Es gab zwei Codes der 1te. und der 2.te.
    te :?:
    Meinst Du vielleicht der 1. und der 2.?
    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!
    @asusdk
    Vielen Dank, für deine fließige Hilfe.
    Ich habe den Code getestet.
    Wenn man z.B auf "C:\" sucht, dauert es sehr lange.
    Und manchmal reagiert die Anwendung nicht mehr, und wird geschloßen.
    Könntets du bitte den neuen Code(auf Seite1) durchschauen.
    Und mir mitteilen ob ich diesen verwenden kann!
    Vieleicht noch Verbesserungen!

    @RodFromGermany
    Ja. der 1. und der 2.

    1.

    VB.NET-Quellcode

    1. Private Sub SucheNachBilder(ByVal strPfad As String)

    2.

    VB.NET-Quellcode

    1. Private Sub ListFiles(ByVal path As String, pattern As String, ll As List(Of String))

    Visual Basic.NET 8o
    MS-SQL
    8o
    ja, der brauch leider ne zeit bisser alles geladen hat, würd die suche evtl. in nen eigenen thread auslagern

    abgesehen habe ich mir den code, jedoch werd ich leider nich schlau draus, insbesondere da er ettliche dirs gar nicht erst auflistet, welche mein code jedoch findet

    so hab das ganze mal mit einem eigenen Thread gemacht, ich hoffe das es so für dich ok ist.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class frmA
    2. Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    4. Me.UpdateStyles()
    5. End Sub
    6. Public Delegate Sub UpdateResults(resultList As List(Of String))
    7. Public Sub UpdateResultsS(resultList As List(Of String))
    8. lb_Fileresults.Items.Clear()
    9. Thread.Sleep(250)
    10. lb_Fileresults.Items.Add("FileSearch completed, Analyse Data.")
    11. lb_Fileresults.Refresh()
    12. Thread.Sleep(500)
    13. lb_Fileresults.Items.Clear()
    14. lb_Fileresults.Refresh()
    15. For i As Integer = 0 To resultList.Count - 1
    16. lb_Fileresults.Items.Add(resultList.Item(i))
    17. lb_Fileresults.TopIndex = lb_Fileresults.Items.Count - 1
    18. Next
    19. End Sub
    20. Private Sub btn_Browse_Click(sender As Object, e As EventArgs) Handles btn_Browse.Click
    21. Select Case fbd_SearchPath.ShowDialog(Me)
    22. Case DialogResult.OK
    23. If IO.Directory.Exists(fbd_SearchPath.SelectedPath) Then
    24. txb_Searchpath.Text = fbd_SearchPath.SelectedPath
    25. End If
    26. End Select
    27. End Sub
    28. Private Sub btn_StartSearch_Click(sender As Object, e As EventArgs) Handles btn_StartSearch.Click
    29. lb_Fileresults.Items.Clear()
    30. lb_Fileresults.Items.Add("FileSearch started, awaiting Data...")
    31. Dim FFT As New Threading.Thread(Sub() FindFiles(txb_Searchpath.Text, txb_SearchFilter.Text)) With {.Priority = ThreadPriority.AboveNormal, .IsBackground = True}
    32. FFT.SetApartmentState(ApartmentState.STA)
    33. FFT.Start()
    34. End Sub
    35. Private Sub FindFiles(path As String, filter As String)
    36. Dim UPD As New UpdateResults(AddressOf UpdateResultsS)
    37. If Not IO.Directory.Exists(path) Then
    38. Exit Sub
    39. End If
    40. Dim subfolders As List(Of String) = GetDirectories(path)
    41. Dim Filelist As New List(Of String)
    42. For Each Item In subfolders
    43. Dim TempFlList As List(Of String) = GetFiles(Item)
    44. For Each fl As String In TempFlList
    45. Filelist.Add(fl)
    46. Next
    47. Next
    48. Dim ResultList As New List(Of String)
    49. For Each Item As String In Filelist
    50. ResultList.Add(Item)
    51. Next
    52. Dim DeletableList As New List(Of String)
    53. For Each Item As String In ResultList
    54. If Item.Contains("System Volume Information") Then
    55. DeletableList.Add(Item)
    56. End If
    57. Next
    58. For Each Item As String In DeletableList
    59. ResultList.Remove(Item)
    60. Next
    61. Dim FilterList As New List(Of String)
    62. If filter <> "" Then
    63. If filter.Contains("|") Then
    64. FilterList.AddRange(filter.Split("|"c))
    65. Else
    66. FilterList.Add(filter)
    67. End If
    68. End If
    69. Dim FinalResultList As New List(Of String)
    70. If FilterList.Count > 0 Then
    71. For i As Integer = 0 To FilterList.Count - 1
    72. For Each Item As String In ResultList
    73. If Item.Contains(FilterList.Item(i)) Then
    74. FinalResultList.Add(Item)
    75. End If
    76. Next
    77. Next
    78. Else
    79. FinalResultList = ResultList
    80. End If
    81. FinalResultList.Sort()
    82. Invoke(UPD, FinalResultList)
    83. End Sub
    84. Public Function GetFiles(ByVal path As String) As List(Of String)
    85. Dim sFiles As New List(Of String)
    86. Try
    87. For Each file As String In IO.Directory.GetFiles(path)
    88. Try
    89. sFiles.Add(file)
    90. Catch ex As Exception
    91. End Try
    92. Next
    93. Catch ex As Exception
    94. End Try
    95. Return sFiles
    96. End Function
    97. Public Function GetDirectories(ByVal path As String) As List(Of String)
    98. Dim subfolders As New List(Of String)
    99. subfolders.Add(path)
    100. For Each subfolder As String In IO.Directory.GetDirectories(path)
    101. subfolders.Add(subfolder)
    102. Try
    103. subfolders.AddRange(GetDirectories(subfolder))
    104. Catch ex As UnauthorizedAccessException
    105. End Try
    106. Next subfolder
    107. Return subfolders
    108. End Function
    109. End Class


    damit du nich extra bei dir alles anpassen musst zum testen hab ich dir gleich ma den Projektordner mit angehangen =)
    Bilder
    • DS.JPG

      163,63 kB, 900×541, 82 mal angesehen
    Dateien
    • FindFilesTest.zip

      (817,19 kB, 82 mal heruntergeladen, zuletzt: )
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „asusdk“ ()

    Cheffboss schrieb:


    @RodFromGermany
    Ja. der 1. und der 2.

    1.

    VB.NET-Quellcode

    1. Private Sub SucheNachBilder(ByVal strPfad As String)

    2.

    VB.NET-Quellcode

    1. Private Sub ListFiles(ByVal path As String, pattern As String, ll As List(Of String))
    Sooo!

    Dank der Suche-Funktion meines Browsers komme ich endlich dahinter, wovon du redest!

    Warst du wirklich der Ansicht, ich hätte mir denken können, mit "1. Code" ist das Snippet aus post#1 gemeint, und mit "2.Code" das aus post#12 ??

    Ja, also wäre sicher hilfreich, wenn du dich in Zukunft noch klarer ausdrücken tätest.

    (Weil in Wirklichkeit gibt es millionen von Codes auf der Welt, und ist extrem schwer auszumachen, welcher davon der 1. und welcher der 2. ist)
    @asusdk
    Leider, bekomme ich manchmal eine
    Fehlermeldung angezeigt!
    Zeile 93
    Habe bereits gegoogelt, ohne Erfolg!

    VB.NET-Quellcode

    1. Invoke(UPD, FinalResultList)


    Fehlermeldung:
    Invoke oder BeginInvoke kann für ein Steuerelement erst aufgerufen werden, wenn das Fensterhandle erstellt wurde.
    Visual Basic.NET 8o
    MS-SQL
    8o
    @ErfinderDesRades
    falsch implementiertes Threading


    hm inwiefern ? in Post 25 hab ich das so implementiert wie es dort im spoilercode steht, habe ich da einen Fehler gemacht ?
    Threading hatte ich eingebaut, damit man nicht auf "Application.DoEvents" zugreifen muss um die GUI am laufen zuhalten, soweit ich mich erinnern kann ist das ja nicht so gern gesehen oder ?
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    @asusdk
    Ich habe am Code sonst nix verändert.
    Mit dem TryCatch habe ich den Fehler abgefangen.
    Das Programm geht so immer noch!
    THX

    VB.NET-Quellcode

    1. Try
    2. FinalResultList.Sort()
    3. Invoke(UPD, FinalResultList)
    4. Catch
    5. End Try

    Visual Basic.NET 8o
    MS-SQL
    8o

    Cheffboss schrieb:

    Mit dem TryCatch habe ich den Fehler abgefangen.
    Da hast u doch nix gekonnt.
    Wenn da ne Exception kommt, wurde Dein Code nicht ausgeführt.
    In welcher Prozedur steht denn der Code?
    Im Konstruktor?
    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!
    @asusdk Also ne Button_Click, da ist das Fenster in jedem Falle vorhanden.
    @Cheffboss Iwas anderes läuft da schief.
    Ich hab mal diesen Code in ein Projekt gezogen und es läuft erst mal. Was muss ich tun, damit es da knallt?
    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!