Datei/Ordneranalyse

  • VB.NET

Es gibt 42 Antworten in diesem Thema. Der letzte Beitrag () ist von TimoS.

    Datei/Ordneranalyse

    Hallo,

    ich habe folgenden Code, welcher Dateien in einem bestimmten Ordner und dessen Unterordnern listet:

    VB.NET-Quellcode

    1. Function getallfiles(spath As String) As List(Of String)
    2. Try
    3. If spath.EndsWith("\") And spath.Length > 3 Then
    4. spath = spath.Substring(0, spath.Length - 1)
    5. print("\ removed")
    6. End If
    7. Dim oDir As New System.IO.DirectoryInfo(spath)
    8. Dim oFiles As System.IO.FileInfo() = oDir.GetFiles()
    9. Dim oFile As System.IO.FileInfo
    10. Dim d As New List(Of String)
    11. d.Clear()
    12. For Each oFile In oFiles
    13. d.Add(oFile.FullName)
    14. files += 1
    15. fls.Invoke(Sub()
    16. fls.Text = "Dateien: " + files.ToString
    17. fls.Update()
    18. End Sub)
    19. stat.Invoke(Sub()
    20. stat.Text = oFile.FullName
    21. stat.Update()
    22. End Sub)
    23. Next
    24. Return d
    25. Catch ex As Exception
    26. print(ex.Message)
    27. err.Invoke(Sub()
    28. errors += 1
    29. err.Text = "Fehler: " + errors.ToString
    30. err.Update()
    31. End Sub)
    32. End Try
    33. End Function
    34. Function getallfolders(spath As String) As List(Of String)
    35. Try
    36. If spath.EndsWith("\") And spath.Length > 3 Then
    37. spath = spath.Substring(0, spath.Length - 1)
    38. print("\ removed")
    39. End If
    40. Dim oDir As New System.IO.DirectoryInfo(spath)
    41. Dim oFiles As System.IO.DirectoryInfo() = oDir.GetDirectories()
    42. Dim oFile As System.IO.DirectoryInfo
    43. For Each oFile In oFiles
    44. l.Add(oFile.FullName)
    45. folders += 1
    46. fld.Invoke(Sub()
    47. fld.Text = "Ordner: " + folders.ToString
    48. fld.Update()
    49. End Sub)
    50. stat.Invoke(Sub()
    51. stat.Text = oFile.FullName
    52. stat.Update()
    53. End Sub)
    54. getallfolders(oFile.FullName)
    55. Next
    56. Return l
    57. Catch ex As Exception
    58. print(ex.Message)
    59. err.Invoke(Sub()
    60. errors += 1
    61. err.Text = "Fehler: " + errors.ToString
    62. err.Update()
    63. End Sub)
    64. End Try
    65. End Function


    Diese Funktionen werden mit

    VB.NET-Quellcode

    1. Function getAllSubfolders(spath As String) As List(Of String)
    2. l.Clear()
    3. errors = 0
    4. files = 0
    5. folders = 0
    6. Dim flist As New List(Of String)
    7. Dim t = Task.Factory.StartNew(Sub()
    8. For Each i As String In getallfolders(spath)
    9. For Each it As String In getallfiles(i)
    10. flist.Add(it)
    11. Next
    12. Next
    13. print(vbNewLine + "Errors: " + errors.ToString)
    14. End Sub)
    15. Return flist
    16. End Function
    17. Sub print(text As String)
    18. cons.Invoke(Sub()
    19. cons.AppendText(vbNewLine + text)
    20. cons.SelectionStart = cons.TextLength
    21. cons.SelectionLength = 0
    22. cons.ScrollToCaret()
    23. End Sub)
    24. End Sub



    angesteuert.

    Wenn ich meinen Dokumente-Ordner durchsuchen lasse, sagt das Programm, dass es keinen Zugriff auf Eigene Bilder hat.

    Kann mir jemand helfen?
    Ja, ja... Ich mach ja schon...

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

    Probier mal dies aus:

    VB.NET-Quellcode

    1. Dim listFiles() = New IO.DirectoryInfo("c:\Temp").GetFiles("*.txt", IO.SearchOption.AllDirectories)
    2. Dim listFolder() = New IO.DirectoryInfo("c:\Temp").GetDirectories("*.*", 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!

    TimoS schrieb:

    Wenn ich meinen Dokumente-Ordner durchsuchen lasse, sagt das Programm, dass es keinen Zugriff auf Eigene Bilder hat.

    Ja dann ist es halt so. Da hilft nur die Exception zu catchen:

    VB.NET-Quellcode

    1. Try
    2. ..
    3. Catch ex As UnauthorizedAccessException
    4. 'Datei ist ReadOnly
    5. 'Pfad zeigt auf einen Ordner
    6. 'Erforderliche Rechte fehlen
    7. Catch ex As System.Security.SecurityException
    8. 'Erforderliche Rechte fehlen
    9. End Try
    /nicht getestet
    @RodFromGermany: Danke für die schnelle Antwort, ich probiers gleich mal aus!

    Ich habe mit System.IO noch nicht sehr viel gearbeitet.
    Heißt IO.SearchOption.AllDirectories, dass er alle Unterordner einbezieht?

    @rotherford: Ich habe die Ordnersuche sowie auch die Dateisuche in ein

    VB.NET-Quellcode

    1. Try
    2. 'Ordnersuche / Dateisuche
    3. Catch As Exception
    4. msgbox(ex.message
    5. End Try

    reingetan. Bei der Ordnersuche kommt auch die Msgbox und sagt, dass er kein Zugriff hat, aber bei der Dateisuche bricht die Ausführung ab und in Visual Studio sagt er bei

    VB.NET-Quellcode

    1. For Each it As String In getallfiles(i)
    2. flist.Add(it)
    3. Next

    "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt"
    Ja, ja... Ich mach ja schon...

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

    Ja, das durchläuft die komplette Verzeichnisstruktur.
    Gucke mal: [VB.NET] System.IO Namespace richtig nutzen

    Du hast keine Instanz erstellt. i ist mehrmals vorhanden! Das heißt du suchst nach i in ner For Each-Schleife, weil es mehrmals da ist... Dann kannst du natürlich nicht i in eine neue Schleife mit einbeziehen, da keine Instanz festgelegt ist.
    Also kein genaues Objekt. Mach da also noch Exit For auf jeden Fall rein und werte zuerst alle Objekte für i aus.

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

    Ja wenn die Exception geworfen wird musst natürlich zum nächsten Item springen:

    VB.NET-Quellcode

    1. for each x in y
    2. Try
    3. Catch ex ..
    4. Continue For
    5. Catch ex2 ..
    6. Continue For
    7. ''evtl. Fehler loggen
    8. Finally
    9. ..
    10. End Try
    11. Next
    /nicht getestet