using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace Island.StandardLib.Utils { /// /// 本地配置文件的读写程序 /// public class ConfigFileIO { private class Statement { internal bool isCommit; internal string name, value; internal Statement(string commit) { name = commit; isCommit = true; } internal Statement(string name, string value) { this.name = name; this.value = value; } internal string toLine() { StringBuilder sb = new StringBuilder(); if (isCommit) { sb.Append("#"); sb.Append(name); } else { sb.Append(name); sb.Append("="); sb.Append(value); } return sb.ToString(); } internal static Statement readLine(string line) { line = line.Trim().Replace("\n", ""); if (line.Length == 0) return new Statement(""); if (line[0] == '#') return new Statement(line.Substring(1)); if (!line.Contains('=')) return new Statement(line); return new Statement(line.Substring(0, line.IndexOf('=')), line.Substring(line.IndexOf('=') + 1)); } } List statements; string file; /// /// 用文件路径初始化读写器 /// /// public ConfigFileIO(string file) { this.file = file; statements = new List(); StreamReader sr = new StreamReader(file, Encoding.UTF8); string buf; while ((buf = sr.ReadLine()) != null) statements.Add(Statement.readLine(buf)); sr.Close(); } public ConfigFileIO() { statements = new List(); } public string StorageFile { get => file; set => file = value; } /// /// 获取或设置一个属性,注意设置属性后如果要更改到硬盘需要手动调用 保存更改 /// /// 属性名 /// 属性值 public string this[string name] { get { foreach (Statement statement in statements) { if (!statement.isCommit && statement.name == name) return statement.value; } return null; } set { foreach (Statement statement in statements) { if (!statement.isCommit && statement.name == name) { statement.value = value; return; } } statements.Add(new Statement(name, value)); } } /// /// 添加注释,注意手动 (若需要) /// /// 注释内容 public void AddCommit(string commit) => statements.Add(new Statement(commit)); /// /// 获取值,如果没有那个属性则返回给定值 /// /// 属性名 /// 给定值 /// 属性值 public string SoftGet(string name, string default_ifnull = "") { string value = this[name]; if (value == null) return default_ifnull; else return value; } /// /// 保存更改到硬盘 /// public void Save() { StreamWriter sw = new StreamWriter(file, false, Encoding.UTF8); foreach (Statement statement in statements) sw.WriteLine(statement.toLine()); sw.Flush(); sw.Close(); } } }