2017-01-21 41 views
0

我有一個程序,用於存儲目錄輸入並在其中包含文件,例如將目錄路徑作爲可觀察集合存儲在這些目錄中

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

會是什麼是最好的數據結構來存儲它,所以我可以很容易地循環的只是輸入目錄或只是文件或當我刪除的文件將被並刪除該目錄。

我正在考慮使用字典,但它也必須是可觀察的。

我目前

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

用什麼該方案並沒有真正給了我很多的選擇,我不能得到一定的輸入目錄輸入事件,因爲它們不以任何方式連接。當我刪除inputDirectory時,我將不得不循環並將輸入目錄與我的輸入文件進行比較,以僅刪除該目錄的文件。

回答

0

如果從System.IO命名空間,而不是一個簡單的字符串中使用的DirectoryInfo類,你可以得到包括通過的GetFiles方法在此目錄中的文件。然後,您可以使用LINQ公開屬性中的所有文件的列表。只要確保您在inputDirectories更改時爲此屬性啓動了OnPropertyChanged

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

您應該在Dictionary中存儲目錄。鍵應該是目錄和值應該是內部目錄或文件。

+0

是的,但我也需要它是可觀察的 – Higeath

+0

您必須通過繼承現有字典編寫自己的自定義字典,並在添加更新或刪除對象時引發事件。 –

0

我在想使用字典,但它也必須是可觀察的。

沒有這樣的類,它在.NET Framework同時實現IDictionary接口和INotifyCollectionChanged接口可用,即有一本字典和可用ObservableCollection<T>之間沒有混合動力,所以你必須創建自己的自定義類。

你可以在這裏提供的ObservableDictionary<TKey, TValue>類看一看:http://blogs.microsoft.co.il/shimmy/2010/12/26/observabledictionarylttkey-tvaluegt-c/

可觀察到的詞典確實是你所需要的。