2014-10-20 78 views
2

我有一個顯示一個文件夾的樹形視圖,與下面的格式的應用程序:在JSON中保存目錄路徑?

- Main Folder 
    - SubFolder 
    - SubFolder 
     - SubFolder 
    - SubFolder 

問題: 1)How do I search for all the folders (not files) and add them to a List called syncDirectories(FIXED)

2)How would I then iterate through my JSON object and save it back to List<SavedData> in order to add/remove data(FIXED)

3)How would I loop through my syncDirectories List and add all the nodes to the TreeView in WPF. (Keep in mind the treeview with checkbox class i am using.

等等。另外,這是一個演示格式的例子,用戶可以有更多的子目錄。

每個文件夾上有感謝這個TREEVIEW CLASS.

複選框爲了保存所有文件夾和子文件夾的用戶添加(和支票),我以爲保存JSON文件中列出的所有文件夾和子文件夾路徑以及它們的(真/假)檢查值將是一個好主意。對?我正在使用Json.NET。

一些JSON瞎搞,我想出了這個格式:

{ 
    "path": "path/here", 
    "subDirectories": [ 
     {"path": "sub/path/here","sync": false}, 
     {"path": "sub/path/here","sync": true}, 
     {"path": "sub/path/here","sync": false} 
    ] 
} 

從而轉化爲類:

public class SavedData 
{ 
    public string path { get; set; } 
    public List<SubDirectory> subDirectories { get; set; } 
} 

public class SubDirectory 
{ 
    public string path { get; set; } 
    public bool sync { get; set; } 
    public List<SubDirectory> subDirectories { get; set; } 
} 

這就提出了一個問題,如何搜索所有的文件夾(不是文件),並將它們添加到名爲syncDirectoriesList

以下是我在我的addDirectory功能至今:

private void addDirectory() 
{ 
    var dialog = new FolderBrowserDialog(); 
    DialogResult result = dialog.ShowDialog(); 
    if (result == System.Windows.Forms.DialogResult.OK) 
    { 
     SavedData data = new SavedData(); 
     data.path = dialog.SelectedPath; 
     syncedDirectories.Add(); 
    } 
    // Add the data to syncedDirectories List, then save the list and refresh the treeView 
    saveData(); 
} 

而且保存功能:

public void saveData() 
    { 
     JsonSerializer serializer = new JsonSerializer(); 
     using (StreamWriter sw = new StreamWriter(appData)) 
     using (JsonWriter writer = new JsonTextWriter(sw)) 
     { 
      serializer.Serialize(writer, syncedDirectories); 
     } 
    } 

當我將數據保存到一個文件,我怎麼會那麼遍歷我的JSON對象並將其保存回List<SavedData>以添加/刪除數據?

更新1

我已經想通了,如何處理我的數據(下同),但究竟如何,我會添加這些「節點」到TreeView?

public void getDirectories(string dir) 
    { 
     // Create the Data Object 
     SavedData data = new SavedData(); 
     data.path = dir; 
     data.subDirectories = new List<SubDirectory>(); 
     foreach (string directory in Directory.GetDirectories(dir)) 
     { 
      SubDirectory subDir = new SubDirectory(); 
      subDir.path = directory; 
      subDir.subDirectories = getSubDir(directory); 
      data.subDirectories.Add(subDir); 
     } 
     syncedDirectories.Add(data); 
    } 

    private List<SubDirectory> getSubDir(string dir) 
    { 
     List<SubDirectory> dataList = new List<SubDirectory>(); 
     SubDirectory subDir = new SubDirectory(); 
     foreach (string directory in Directory.GetDirectories(dir)) 
     { 
      subDir.path = directory; 
      subDir.subDirectories = new List<SubDirectory>(); 
      subDir.subDirectories = getSubDir(directory); 
      dataList.Add(subDir); 
     } 
     return dataList; 
    } 

後來,我打算在GitHub上發佈這個程序開源。當我這樣做時,我會在這裏發佈鏈接。

回答

1

經過幾個小時的功能後,我意識到需要兩個功能來完成這項任務。

public void getDirectories(string dir) 
    { 
     // Create the Data Object 
     SavedData data = new SavedData(); 
     data.path = dir; 
     data.subDirectories = new List<SubDirectory>(); 
     foreach (string directory in Directory.GetDirectories(dir)) 
     { 
      SubDirectory subDir = new SubDirectory(); 
      subDir.path = directory; 
      subDir.subDirectories = getSubDir(directory); 
      data.subDirectories.Add(subDir); 
     } 
     syncedDirectories.Add(data); 
    } 

    private List<SubDirectory> getSubDir(string dir) 
    { 
     List<SubDirectory> dataList = new List<SubDirectory>(); 
     SubDirectory subDir = new SubDirectory(); 
     foreach (string directory in Directory.GetDirectories(dir)) 
     { 
      subDir.path = directory; 
      subDir.subDirectories = new List<SubDirectory>(); 
      subDir.subDirectories = getSubDir(directory); 
      dataList.Add(subDir); 
     } 
     return dataList; 
    } 

這得到的主目錄然後循環,找到所有的子目錄,並將它們添加到我的列表。