Datei-Explorer

  • VB.NET
  • .NET (FX) 4.0

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Datei-Explorer

    Wie kann man sich so eine Art Datei-Exlorer selber mit VB basteln? Hat jemand ne Idee?
    Wichtig ist mir halt auch, dass ich Dateien öffnen kann und in Andere Ordner reinkomme.
    Natürlich geht das. FileInfo, DurectoryInfo und DriveInfo geben dir die Dateien, etc. Und mit Process.Start kannst du ausführbare Dateien sowie "normale" Dateien öffnen/ausführen.

    Marceliboy schrieb:

    selber mit VB basteln
    Das ist sicherlich eine interessante Programmierübung, nicht mehr, allerdings auch nicht weniger. :thumbup:
    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!
    @Rasre1 Ich verstehe den Sinn nicht ganz. Das sind doch nur Tutorials zu Controls, oder?
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    In zeigt Tom Wendel das ja im Prinzip schon. Aber wenn ich mein Programm starte dauert mir das zu lange. Gibt's da vielleicht noch ein andere Möglichkeit.

    Der Code war:

    VB.NET-Quellcode

    1. ​Imports System.IO
    2. Public Class FileMAN
    3. Private Sub FileMAN_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. Dim drives = DriveInfo.GetDrives()
    5. For Each drive As DriveInfo In drives
    6. Dim node = TreeView1.Nodes.Add(drive.Name)
    7. node.Tag = drive.RootDirectory
    8. FillNode(node, drive.RootDirectory)
    9. Next
    10. End Sub
    11. Private Sub FillNode(ByVal node As TreeNode, ByVal directory As DirectoryInfo)
    12. Try
    13. Dim directories = directory.GetDirectories()
    14. For Each subdirectory As DirectoryInfo In directories
    15. Dim subnode = node.Nodes.Add(subdirectory.Name)
    16. subnode.Tag = subdirectory
    17. FillNode(subnode, subdirectory)
    18. Next
    19. Catch ex As Exception
    20. End Try
    21. End Sub
    22. Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
    23. Dim directory As DirectoryInfo
    24. directory = TreeView1.SelectedNode.Tag
    25. Dim files = directory.GetFiles()
    26. ListView1.Items.Clear()
    27. For Each File As FileInfo In files
    28. ListView1.Items.Add(File.Name)
    29. Next
    30. End Sub
    31. End Class
    Nun ja, ich würde die TreeView nicht von Beginn an füllen, sondern immer nur das momentan sichtbare.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ThePlexian schrieb:

    Nun ja, ich würde die TreeView nicht von Beginn an füllen, sondern immer nur das momentan sichtbare.
    aber im Hintergrund schon mal die Komplettstruktur in einen internen Speicherbereich laden, um den Treeview langsam aber sicher zu komplettieren.

    Der Explorer wendet übrigens ein mehrstufiges Verfahren an:
    Zunächst alle Dateinamen und die "schnellen" Eigenschaften wie CreationDate etc.
    Danach die dateiinternen Daten wie MP3-Tags
    Und ganz zum Schluss die aufwendige Bildvorschau.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Jo, eine Primitiv-Lösung scheint zunächstmal vergleichsweise einfach, fällt aber unperformant und gemein Speicherfressend aus.
    Da gibts dann hauptsächlich 2 Wege der Optimierung
    1) nur die notwendigen Ordner laden
    2) teilweise Daten auch in Nebenthreads nachladen

    Ich hab mich an dem Thema folgendermassen verkünstelt: Ordnerstruktur im Treeview
    Und das ist nur die Treeview für die Ordner, hinzu kommt ja noch das ListView, was die Dateien anzeigen soll, und die man dann öffnen kann, oder aber auch löschen, kopieren etc.
    In meim Browser hab ich "einfach" ein WebBrowser-Control genommen, und dieses navigiert im Filesystem statt im Internet.
    Aber auf Codeproject gibts auch Datei-Browser, die die Listview selbst programmiert haben, und der code sah nicht mal gewaltig viel umständlicher aus als bei mir.

    Jedenfalls nix für Anfänger.