我有一个显示一个文件夹的树形视图,与下面的格式的应用程序:在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上发布这个程序开源。当我这样做时,我会在这里发布链接。