using System.Collections.Generic; namespace Netch.Models { public class Mode { /// /// 备注 /// public string Remark; /// /// 无后缀文件名 /// public string FileName; /// /// 类型 /// 0. 进程加速 /// 1. TUN/TAP 规则内 IP CIDR 加速 /// 2. TUN/TAP 全局,绕过规则内 IP CIDR /// 3. HTTP 代理(自动设置到系统代理) /// 4. Socks5 代理(不自动设置到系统代理) /// 5. Socks5 + HTTP 代理(不自动设置到系统代理) /// public int Type = 0; /// /// 绕过中国(0. 不绕过 1. 绕过) /// public bool BypassChina = false; /// /// 规则 /// public List Rule = new List(); /// /// 获取备注 /// /// 备注 public override string ToString() { return string.Format("[{0}] {1}", Type + 1, Remark); } /// /// 获取模式文件字符串 /// /// 模式文件字符串 public string ToFileString() { string FileString; // 进程模式 if (Type == 0) { FileString = $"# {Remark}\r\n"; } // TUN/TAP 规则内 IP CIDR,无 Bypass China 设置 else if (Type == 1) { FileString = $"# {Remark}, {Type}, 0\r\n"; } // TUN/TAP 全局,绕过规则内 IP CIDR // HTTP 代理(自动设置到系统代理) // Socks5 代理(不自动设置到系统代理) // Socks5 + HTTP 代理(不自动设置到系统代理) else { FileString = $"# {Remark}, {Type}, {(BypassChina ? 1 : 0)}\r\n"; } foreach (var item in Rule) { FileString = $"{FileString}{item}\r\n"; } // 去除最后两个多余回车符和换行符 FileString = FileString.Substring(0, FileString.Length - 2); return FileString; } /// /// 写入模式文件 /// public void ToFile(string Dir) { if (!System.IO.Directory.Exists(Dir)) { System.IO.Directory.CreateDirectory(Dir); } var NewPath = System.IO.Path.Combine(Dir, FileName); if (System.IO.File.Exists(NewPath + ".txt")) { // 重命名该模式文件名 NewPath += "_"; while (System.IO.File.Exists(NewPath + ".txt")) { // 循环重命名该模式文件名,直至不重名 NewPath += "_"; } } FileName = System.IO.Path.GetFileName(NewPath); // 加上文件名后缀 NewPath += ".txt"; // 写入到模式文件里 System.IO.File.WriteAllText(NewPath, ToFileString()); } } }