Filemanager /System Dateien und Verzeichnisse

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von Vbnet58.

    Filemanager /System Dateien und Verzeichnisse

    Hallo Freunde, bin gerade an einem filemanager beschäftigt. Es funktioniert auch so. Bei der suche und hinzufügen in einem listview gibs kein Problem. Ich möchte aber die Systemdatein und die systemverzeichnisse die versteckt sind nicht angezeigt bekommen. Kann mir da einer helfen wie ich es verhindern kann das sie hinzugefügt werden?

    Für den such Vorgang. Benutze ich die for each file in... Setze die Wildcad z. B. :, *. Mp3. Es soll bei *.* alle Dateien aber ohne systemverzeichnisse und Dateien angezeigt werden.

    Danke für eure Hilfe.
    @Vbnet58 Willkommen im Forum. :thumbup:
    Frage zu jeder DAtei deren FileAtribute ab und werte die entsprechend aus:
    docs.microsoft.com/de-de/dotne…tes?view=netframework-4.8
    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!
    @Vbnet58 Ich postetete Dir einen Link.
    oben steht
    Gibt zurück
    FileAttributes
    Wenn Du auf FileAttributes klickst, kommst Du auf die Liste der möglichen Antworten.
    Rollst Du den ersten Link etwas nach unten und findest ein Beispiel in VB.NET.
    Dies siehst Du Dir an und versuchst es zu verstehen und auf Dein Problem anzuwenden.
    Um anzusehen, was Dein Programm macht oder eben nicht, musst Du es "debuggen":
    Debuggen, Fehler finden und beseitigen
    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!
    ich komme da irgenwie nicht weiter

    Meine Suchfunktion:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim MyAttributes As FileAttributes
    3. Dim path As String = "e:\"
    4. 'Verzeichnisse
    5. For Each f As String In My.Computer.FileSystem.GetDirectories(path, FileIO.SearchOption.SearchTopLevelOnly)
    6. MyAttributes = File.GetAttributes(f)
    7. If MyAttributes = IO.FileAttributes.Directory Then
    8. ListBox1.Items.Add(f.Split("\")(f.Split("\").Count() - 1))
    9. End If
    10. Next
    11. 'Dateien
    12. For Each f As String In My.Computer.FileSystem.GetFiles(path, FileIO.SearchOption.SearchTopLevelOnly, "*.*")
    13. MyAttributes = File.GetAttributes(f)
    14. If MyAttributes = IO.FileAttributes.Directory Then
    15. ListBox2.Items.Add(f.Split("\")(f.Split("\").Count() - 1))
    16. End If
    17. Next
    18. End Sub


    Die Verzeichnisstruktur wird nicht richtig dargestellt, d.h.: es werden nicht alle Verzeichnisse angezeigt, oder Dateien. Wo mache ich fehler ?
    irgenwie kann ich für die dateien oder Verzeichnisse nicht abfragen, erbitte um hilfe
    Mein Ziel: z.B.: C:\ Alle verzeichnisse ausser die Systemdateien und Verzeichnisse sollen nicht angezeigt werden bzw. nicht in die Listbox eingefügt werden!

    bei mir klappt es irgen wie nicht richtig.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Vbnet58“ ()

    @Vbnet58 OK.
    Räumen wir erst mal grundsätzlich auf:
    Option Strict On: Visual Studio - Empfohlene Einstellungen
    Wenn Du das sofort umsetzt, gewöhnst Du Dir keinen veralteten Unsinn an.
    Dann nehmen wir Klassen und Prozeduren aus dem mächtigen IO-Namespace.
    Des weiteren empfehle ich Dir, das Form_Load-Event nicht zu verwenden, da dort eine Reihe von Exceptions verschluckt werden, ohne dass Du es mitbekommst.
    ====
    In Deiner zweiten Schleife, wo Dateien angezeigt werden sollen, lässt Du nur Einztäge zu, die Verzeichnisse sind:

    VB.NET-Quellcode

    1. If MyAttributes = IO.FileAttributes.Directory Then
    Wenn wir nun alles zusammensetzen, kommt folgender Code raus:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim path As String = "c:\"
    3. 'Verzeichnisse
    4. Dim dirs = New DirectoryInfo(path).GetDirectories("*.*", SearchOption.TopDirectoryOnly)
    5. For Each f In dirs
    6. If Not f.Attributes.HasFlag(FileAttributes.Hidden) Then
    7. ListBox1.Items.Add(f.Name)
    8. End If
    9. Next
    10. 'Dateien
    11. Dim files = New DirectoryInfo(path).GetFiles("*.*", SearchOption.TopDirectoryOnly)
    12. For Each f In files
    13. If Not f.Attributes.HasFlag(FileAttributes.Hidden) Then
    14. ListBox2.Items.Add(f.Name)
    15. End If
    16. Next
    17. End Sub
    Feddich
    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!
    @RodFromGermany Danke!.

    Räumen wir erst mal grundsätzlich auf:Option Strict On: Visual Studio - Empfohlene EinstellungenWenn Du das sofort umsetzt, gewöhnst Du Dir keinen veralteten Unsinn an.Dann nehmen wir Klassen und Prozeduren aus dem mächtigen IO-Namespace.Des weiteren empfehle ich Dir, das Form_Load-Event nicht zu verwenden, da dort eine Reihe von Exceptions verschluckt werden, ohne dass Du es mitbekommst.====In Deiner zweiten Schleife, wo ...


    Funktioniert.

    Da ich zwar kein Richtiger Programmierer bin, und dieser nur aus Hobby mache, macht es mir trotz Richtig Spaß, leider kenne ich teils die Grundkenntnisse (von Vb6), ist es wirklich für allein Kämpfer richtig schwer etwas zu lernen. Seid Vb2010 versuche ich zeit zu zeit etwas zu lernen. Nun aber Gott sei dank gibt es menschen für Du, die Anfänger wie mir weiterhelfen. Nochmals Danke.
    @Vbnet58 Ordner haben ein System-Icon.
    Probierma dies: docs.microsoft.com/de-de/dotne…ons?view=netframework-4.8
    Sortiere die Elemente zuerst nach dem Attribut, danach nach { Alphabet, Zeit, Größe usw. }.
    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!
    :?:
    ​Probierma dies: docs.microsoft.com/de-de/dotne…ons?view=netframework-4.8

    Ist chinesisch für mich verstehe kein wort von #C
    kann man es auch für vb.net übersetzeten

    ​Sortiere die Elemente zuerst nach dem Attribut, danach nach { Alphabet, Zeit, Größe usw. }.

    Wie geht das ? => Listview ist es "Ascending" ausgewählt!
    Quasi-Vollzitat des Vorposts an dieser Stelle entfernt ~VaporiZed

    soweit habe ich auch überlegt, nun wie man es extrahiert, habe ich kein Kenntnisse. Ich glaube meine Frage ist offensichtlich, nun ich komm nicht weiter. Die Weiterleitungen in msn Seite sagt mir nicht (soweit bin ich nicht).

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

    Vbnet58 schrieb:

    wie kann ich sie in mein Projekt umsetzten
    Erstell zunächst ein separates Projekt und untersuch darin ausschließlich das Snippet mit den Controls, die da angesprochen werden.
    Wenn Du das verstanden hast, überleg, wie Du es in Dein Programm integrieren kannst.
    ====
    Probier in diesem Snippet mal dies:

    VB.NET-Quellcode

    1. PictureBox1.Image = bitmap1

    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!

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

    @Vbnet58 Ich hab einen Code gefunden, der das Icon des jeweiligen Ordners rausholt (getestet):
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. ' Form mit Button und PictureBox
    3. Public Class Form1
    4. <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.[Unicode])>
    5. Public Structure SHFILEINFOW
    6. Public hIcon As IntPtr
    7. Public iIcon As Integer
    8. Public dwAttributes As Integer
    9. <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> Public szDisplayName As String
    10. <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=80)> Public szTypeName As String
    11. End Structure
    12. <DllImport("shell32.dll", EntryPoint:="SHGetFileInfoW")>
    13. Private Shared Function SHGetFileInfoW(<InAttribute(), MarshalAs(UnmanagedType.LPTStr)> ByVal pszPath As String, ByVal dwFileAttributes As Integer, ByRef psfi As SHFILEINFOW, ByVal cbFileInfo As Integer, ByVal uFlags As Integer) As Integer
    14. End Function
    15. <DllImport("user32.dll", EntryPoint:="DestroyIcon")>
    16. Private Shared Function DestroyIcon(ByVal hIcon As System.IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
    17. End Function
    18. Private Function GetIcon(ByVal PathName As String) As Bitmap
    19. Dim RIcon As New SHFILEINFOW
    20. SHGetFileInfoW(PathName, 0, RIcon, Marshal.SizeOf(RIcon), &H100 Or &H1)
    21. Dim FinalyImage As Bitmap = Icon.FromHandle(RIcon.hIcon).ToBitmap
    22. DestroyIcon(RIcon.hIcon)
    23. Return FinalyImage
    24. End Function
    25. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    26. Me.PictureBox1.Image = GetIcon("c:\Temp") ' C:\Users\NAME\Links\
    27. End Sub
    28. End Class
    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!
    @RodFromGermany Klappt wunderbar, nun wie kann diesen icon in Mein Projekt so laden, das sie beim Suchen bzw. beim Pfad wechsel, wenn dateiein (icon) wenn Verzeichnisse vorhanden diesen Icon darstellt ?(

    Hier mein Projektscreenshoot!, sieht echt doof aus ohne den Verzeichnis icon!

    Trotzdem danke für eure netten Tip ( ?( )
    Irgendwie müsste es gehen.

    Ps. Inzwischen: - Mit dem Sortieren hab ich hin bekommen, das nur bei den Ordner wenn datei vorhanden sind Immer oben stehen (und dieser noch Alphabetisch :thumbsup: )
    Bilder
    • MediaBrower_Screenshoot.jpg

      66,62 kB, 807×674, 100 mal angesehen

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

    @Vbnet58 Du musst diese Icons jedes Mal dynamisch laden, wenn Du es benötigst.
    Was ist mit dem Sortieren?
    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!