我有一個顯示一個文件夾的樹形視圖,與下面的格式的應用程序:在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; }
}
這就提出了一個問題,如何搜索所有的文件夾(不是文件),並將它們添加到名爲syncDirectories
的List
?
以下是我在我的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上發佈這個程序開源。當我這樣做時,我會在這裏發佈鏈接。