#

WPF: Versteckte Verzeichnisse ausblenden
 
Problem:
bei einem Aufruf aller Verzeichnisse in WPF werden viele Ordner mit angegeben, welche eigentlich nicht sichbar sein sollten.
Es werden einige Verzeichnisse angezeigt wie Dokumente und Einstellungen oder $Recycle.bin, welche für den User nicht sichbar sein sollten.
 
Verzeichnisse in WPF anzeigen
Verzeichnisse werden in WPF aufgelistet, indem man von einem DirectoryInfo-Verzeichnis die Unterverzeichnisse mit .GetDirectories() auflisten läst.

DirectoryInfo[] arrFolders = dir.GetDirectories();
foreach ( DirectoryInfo folder in arrFolders.OrderBy(f => f.Name)) //*orderd by name
 

 
Loop durch die Verzeichnisse.
Beim Loop durch die Unterverzeichnisse muss man auf die Attributes der einzelnen Ordner achten.

 
Überwachungsauszug einer Directory/DirectoryInfo in WPF:
Man sieht, dass mehrer Attribute vorliegen, welche zur Laufzeit geprüft werden müssen

folder {Dokumente und Einstellungen}
Attributes Hidden | System | Directory | ReparsePoint | NotContentIndexed
FullName "C:\\Dokumente und Einstellungen"
 

System.IO.DirectoryInfo
System.IO.FileAttributes
String
 

 
Hidden Attributes
Auflistung einer Hidden Directory
Dokumente und Einstellungen

 
 
Lösung:
Abfragen der FileAttribute Hidden und System der Datei-Verzeichnisse
Man kann die einzelnen Verzeichnisse abfragen nach den Attributen mit Folder.Attributes.HasFlag und diese prüfen gegen die FileAttrute Hidden und System.
Die FileAttribute Hidden und System dürfen nicht vorhkommen.

if (folder.Attributes.HasFlag(FileAttributes.Hidden)==false && folder.Attributes.HasFlag(FileAttributes.System )==false )
{
..
}

 
Hier eine komplette C# Methode zum Auflisten und Filtern nach dem Beispiel oben.

public void load_Folders()
{
//------------< load_Folders() >------------
lstFolders.Items.Clear();
 
//< check >
if (basePath == "") return;
//</ check >
 
//< correct >
basePath = basePath + "\\";
//</ correct >
 
//< init >
DirectoryInfo dir = new DirectoryInfo(basePath);
//</ init >
 
 
DirectoryInfo[] arrFolders = dir.GetDirectories();
foreach ( DirectoryInfo folder in arrFolders.OrderBy(f => f.Name)) //*orderd by name
{
//------< Sub-Directory >------
if (folder.Attributes.HasFlag(FileAttributes.Hidden)==false && folder.Attributes.HasFlag(FileAttributes.System )==false )
{
//< get Name >
string sFoldername = folder.Name;
Label lblItem = new Label();
lblItem.Content = sFoldername;
//</ get Name >
 
//< add to List >
ListItem item = new ListItem();
lstFolders.Items.Add(lblItem);
//</ add to List >
}
//------</ Sub-Directory >------
}
//------------</ load_Folders() >------------
}

 
Vergleich Dateiexplorer vs WPF Liste
im Dateiexplorer unter C:\
Rechts dargestellt sind die reduzierten Verzeichnisse

 
 
Verzeichnisse mit WPF
 
Liste der Verzeichnisse mit DirectoryInfo.GetDirectories
Interne Verzeichnisse und Systeminformationen sind rot durchgestrichen.

 
 
Nach der Reduzierung
Die Liste stimmt mit der oberen Liste aus dem Windows Dateiexplorer überein.

 
Mobile

.

soap2day