2017-01-21 2 views
0

Ich habe ein Programm, wo ich Verzeichniseingaben mit Dateien in diesem Verzeichnis z.Speichern von Verzeichnispfaden mit Dateien in diesen Verzeichnissen als beobachtbare Sammlung

C:/Documents 
C:/Documents/1.jpg 
C:/Documents/2.jpg 

Was ist die beste Datenstruktur zu speichern wäre, so könnte ich leicht Schleife nur für Eingang Verzeichnisse oder einfach nur Dateien oder wenn ich das Verzeichnis lösche die Datei als auch sein löschen würde.

Ich habe über das Wörterbuch nachgedacht, aber es muss auch beobachtbar sein.

Was ich zur Zeit

private ObservableCollection<string> inputDirectories new ObservableCollection<string>();; 
private ObservableCollection<string> inputFiles = new ObservableCollection<string>(); 

Diese Lösung gibt mir nicht wirklich viel Auswahl, kann ich nicht nur Eingangs Folgen für bestimmte Eingabeverzeichnis erhalten, da sie verbunden sind in keiner Weise. Wenn ich inputDirectory lösche, müsste ich das Eingabeverzeichnis mit meinen Eingabedateien wiederholen und vergleichen, um nur Dateien für dieses Verzeichnis zu löschen.

Antwort

0

, wenn Sie die Directory Klasse aus dem System.IO Namespace statt einer einfachen Zeichenfolge verwenden, können Sie die Dateien in diesem Verzeichnis über die GetFiles Methode einbezogen erhalten. Sie können dann die Liste aller Dateien in einer Eigenschaft mit LINQ verfügbar machen. Stellen Sie nur sicher, dass Sie eine OnPropertyChanged für diese Eigenschaft auslösen, wenn sich die EingabeDirectories ändern.

private ObservableCollection<DirectoryInfo> inputDirectories = new ObservableCollection<DirectoryInfo>(); 

inputDirectories.Add(new DirectoryInfo(@"C:\Documents")); 

public IEnumerable<string> Files => inputDirectories.SelectMany(d => GetFilesInDirectory(d)); 

private IEnumerable<string> GetFilesInDirectory(DirectoryInfo directory) 
    { 
    return directory.GetFiles().Select(x => x.FullName); 
    } 
-1

Sie sollten Verzeichnis in Dictionary speichern. Der Schlüssel sollte ein Verzeichnis sein und der Wert sollte ein inneres Verzeichnis oder eine Datei sein.

+0

Ja, aber ich brauche es auch, um beobachtbar zu sein – Higeath

+0

Sie müssen Ihr eigenes Benutzerwörterbuch schreiben, indem Sie existierendes Wörterbuch erben und Ereignis beim Hinzufügen von Aktualisieren oder Löschen von Objekten auslösen. –

0

Ich habe über das Wörterbuch nachgedacht, aber es muss auch beobachtbar sein.

Es gibt keine solche Klasse, die sowohl die IDictionary-Schnittstelle und die INotifyCollectionChanged Schnittstelle in .NET Framework verfügbar implementiert, dh es gibt keine Hybrid zwischen einem Wörterbuch und einer ObservableCollection<T> zur Verfügung, so müssen Sie Ihre eigenen erstellen Klasse.

Sie konnten einen Blick auf die ObservableDictionary<TKey, TValue> Klasse hier zur Verfügung gestellten nehmen: http://blogs.microsoft.co.il/shimmy/2010/12/26/observabledictionarylttkey-tvaluegt-c/

Ein beobachtbaren Wörterbuch ist in der Tat, was Sie brauchen.

Verwandte Themen