using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection.Metadata; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static System.Collections.Specialized.BitVector32; namespace LB_SmartVision.Tool { public class OperateIniHelper { private string _iniFilePath = "Config"; /// /// IniFilePath需要包含.ini,在引用前需要设置FileName /// public string IniFilePath { get { return System.IO.Path.Combine(Application.StartupPath, _iniFilePath, _iniFileName); } set { _iniFilePath = value; } } private string _iniFileName = "Default.ini"; public static string Suffix = ".ini"; private bool bClosedIni = false; public string IniFileName { get { return _iniFileName; } set { int index = value.LastIndexOf('.'); // 如果没有找到分隔符,则返回原始字符串 if (index == -1) _iniFileName = value + Suffix; else _iniFileName = value.Substring(0, index) + Suffix; } } [DllImport("kernel32.dll", CharSet = CharSet.Auto)] private static extern int WritePrivateProfileString(string section, string key, string value, string filePath); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] private static extern int GetPrivateProfileString(string section, string key, string defaultValue, StringBuilder returnValue, int size, string filePath); public OperateIniHelper() { } public OperateIniHelper(string iniFileName = "MyAlgorithm_1", string iniFilePath = "MyAlgorithm") { IniFileName = iniFileName; IniFilePath = iniFilePath; GetValidFilePath(IniFilePath); } public void SetValue(string section, string key, object value, string path = "") { // 选择合适的编码 Encoding encoding = Encoding.UTF8; if (path != "" && value != null) { WritePrivateProfileString(section.Trim(), key.Trim(), value.ToString(), path); int index = path.LastIndexOf('.'); if (index != -1) { string EncryptPath = path.Substring(0, index) + "_closed" + Suffix; Tool.EncryptFile(path, EncryptPath); } } else if (value != null) { WritePrivateProfileString(section.Trim(), key.Trim(), value.ToString(), IniFilePath); int index = IniFilePath.LastIndexOf('.'); if (index != -1) { string EncryptPath = IniFilePath.Substring(0, index) + "_closed" + Suffix; Tool.EncryptFile(IniFilePath, EncryptPath); } } } /// /// 获取Ini文件值 /// /// /// /// /// public string GetValue(string section, string key, string path = "") { StringBuilder returnValue = new StringBuilder(255); if (path != "" && path != null && GetValidFilePath(path).Item1) GetPrivateProfileString(section.Trim(), key.Trim(), string.Empty, returnValue, returnValue.Capacity, path); else if (GetValidFilePath(IniFilePath).Item1) GetPrivateProfileString(section.Trim(), key.Trim(), string.Empty, returnValue, returnValue.Capacity, IniFilePath); //不存在值时写入默认值0 if (string.IsNullOrEmpty(returnValue.ToString().Trim())) { string strDefalut = "0"; if (path != "" && path != null) SetValue(section.Trim(), key.Trim(), strDefalut, path); else SetValue(section.Trim(), key.Trim(), strDefalut); return strDefalut; } return returnValue.ToString(); } static (bool, string) GetValidFilePath(string path) { try { if (path == "" || path == null) return (false, null); // 检查路径是否包含非法字符 string fullPath = Path.GetFullPath(path); bool result = !string.IsNullOrWhiteSpace(fullPath) && path.Equals(fullPath, StringComparison.OrdinalIgnoreCase); // 不存在非法字符则判断是否需要创建 if (result) { string parentPath = Path.GetDirectoryName(path); // 判断文件夹是否存在 if (!Directory.Exists(parentPath) && parentPath != null) { try { Directory.CreateDirectory(parentPath); // 文件不存在则写入默认值 } catch { return (false, null); } } } return (result, path); } catch { return (false, null); } } } }