Atem94
Messages postés1Date d'inscriptionlundi 11 août 2008StatutMembreDernière intervention 4 octobre 2010
-
4 oct. 2010 à 14:30
xmox667
Messages postés357Date d'inscriptionjeudi 8 juin 2006StatutMembreDernière intervention26 décembre 2011
-
15 mai 2011 à 15:06
Tout d'abords bonjours et merci à ceux qui prendront le temps de me lire et de me répondre.
Donc, voilà : Je voudrais pouvoir récupérer et afficher dans un listview tous les fichiers dans tous les dossiers du disque C portant le même type (*.txt par exemple).
J'arrive sans trop de problème à afficher les fichiers d'un dossier, mais bon, on est loin de ce que je voudrais bien pouvoir faire ..
xmox667
Messages postés357Date d'inscriptionjeudi 8 juin 2006StatutMembreDernière intervention26 décembre 20114 15 mai 2011 à 15:06
Salut,
J'ai une petite application WPF qui liste tout les fichiers du disque sélectionnées.
partie du code qui liste les fichiers:
example : letter = "c:" et pattern="*.txt"
List<string> files = new List<string>();
foreach (string filename in Directory.EnumerateFiles(letter,pattern, SearchOption.AllDirectories).SafeWalk<string>())
files.Add(filename);
ListBox.ItemSource = files ;
SafeWalk est une extension qui évite de lever une exception lorsque le fichier n'est pas accessible et qu'il faut les droits admin.
Tu ajoute cette classe a ton projet:
public static class DirectoriesExtensions
{
public static IEnumerable<T> SafeWalk<T>(this IEnumerable<T> source)
{
var enumerator = source.GetEnumerator();
bool? hasCurrent = null;
do
{
try{hasCurrent = enumerator.MoveNext(); }
catch{hasCurrent = null; }
if (hasCurrent ?? false) yield return enumerator.Current;
} while (hasCurrent ?? true);
}
}
Améliorations:
Utiliser une propriété de dépendance de type ObservableCollection pour la liste des fichiers
Définir un ItemTemplate pour le ListBox (nommé FileListeBox)
Tu peux charger tous les fichiers "*.*" et tu filtre la vue du ListBox.
Filtrage:
Tu ajoute un TextBox (nommé Pattern) et sur don event TextChanged:
ICollectionView view = CollectionViewSource.GetDefaultView(FileListeBox.ItemsSource);
view.Filter x> x.Contains(Pattern.Text.Trim());
Si tu veux les sources de mon appli je peux te les envoyer par mail.