123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- using System.IO;
- using System.Text.Json;
- namespace WpfSample.Models {
- internal class DemoItem {
- public int Id { get; set; } = 1;
- public int Order { get; set; } = 1;
- public string Name { get; set; } = string.Empty;
- public string Description { get; set; } = string.Empty;
- public DemoItem Parent { get; set; } = DemoRoot.Root;
- public List<DemoItem> Items { get; } = new List<DemoItem>();
- public List<DemoMessage> Messages { get; } = new List<DemoMessage>();
- private IncrementNumberGenerator IncrementIdentify = new IncrementNumberGenerator();
- public int NextId => IncrementIdentify.Value;
- public int NextOrder => Items.Count;
- static public DemoItem? Load(DemoItem parent, string path, string? name = null) {
- if (path == null || Directory.Exists(path) == false) {
- return null;
- }
- DirectoryInfo directoryInfo = new DirectoryInfo(path);
- if (name == null) {
- name = directoryInfo.Name;
- }
- if (parent == null) {
- parent = DemoRoot.Root;
- }
- DemoItem data = new DemoItem() {
- Name = name,
- Id = parent.NextId,
- Order = parent.NextOrder,
- Parent = parent,
- };
- // 加载 文件
- foreach (FileInfo messageFileInfo in directoryInfo.GetFiles("*.json")) {
- using StreamReader reader = new StreamReader(messageFileInfo.FullName);
- if (JsonSerializer.Deserialize<DemoMessage>(reader.ReadToEnd()) is DemoMessage message) {
- data.Messages.Add(message);
- }
- }
- // 加载 子元素
- foreach (DirectoryInfo subItemDirectoryInfo in directoryInfo.GetDirectories()) {
- if (Load(data, subItemDirectoryInfo.FullName) is DemoItem subItem) {
- data.Items.Add(subItem);
- }
- }
- return data;
- }
- static public bool Save(DemoItem data, string path, bool overwrite = false) {
- if (path == null) {
- return false;
- }
- if (overwrite == false && (Directory.Exists(path) || File.Exists(path))) {
- return false;
- }
- if (overwrite == true && Directory.Exists(path)) {
- try {
- Directory.Delete(path, true);
- }
- catch {
- return false;
- }
- }
- if (overwrite == true && File.Exists(path)) {
- try {
- File.Delete(path);
- }
- catch {
- return false;
- }
- }
- try {
- Directory.CreateDirectory(path);
- }
- catch {
- return false;
- }
- // 保存 文件
- foreach (DemoMessage message in data.Messages) {
- string messageFilePath = Path.Combine(path, $"{message.Name}.json");
- try {
- using FileStream file = File.Create(messageFilePath);
- JsonSerializer.Serialize(file, message);
- }
- catch {
- continue;
- }
- }
- // 保存 子元素
- foreach (DemoItem subItem in data.Items) {
- string subItemPath = Path.Combine(path, subItem.Name);
- if (Save(subItem, subItemPath, overwrite) == false) {
- }
- }
- return true;
- }
- }
- }
|