Пример #1
0
 private static void LoadServerSettings()
 {
     if (File.Exists(Global.SettingIni) == false)
     {
         return;
     }
     string[] items    = INIOperationClass.INIGetAllItems(Global.SettingIni, ServersIniSection);
     string[] keyvalue = new string[2];
     try
     {
         foreach (string item in items)
         {
             keyvalue = SplitServerString(item.Trim());
             if (Global.ServerDictionary.ContainsKey(keyvalue[0]) == false)
             {
                 Global.ServerDictionary.Add(keyvalue[0], keyvalue[1]);
             }
             else
             {
                 MessageBox.Show("发现重复键 " + keyvalue[0]);
             }
         }
     }
     catch (System.Exception e)
     {
         MessageBox.Show(e.Message);
     }
 }
Пример #2
0
        /// <summary>
        /// 在INI文件中,删除指定节点中的所有内容。
        /// </summary>
        /// <param name="iniFile">INI文件</param>
        /// <param name="section">节点</param>
        /// <returns>操作是否成功</returns>
        public static bool INIEmptySection(string iniFile, string section)
        {
            if (string.IsNullOrEmpty(section))
            {
                throw new ArgumentException("必须指定节点名称", "section");
            }

            return(INIOperationClass.WritePrivateProfileSection(section, string.Empty, iniFile));
        }
Пример #3
0
        /// <summary>
        /// 读取ini键值
        /// </summary>
        /// <param name="section">节点</param>
        /// <param name="item">项</param>
        /// <returns>键值</returns>
        private static string GetSettingsValue(string section, string item)
        {
            string value = INIOperationClass.INIGetStringValue(Global.SettingIni, section, item, null);

            if (value == null)
            {
                throw new Exception();
            }
            else
            {
                return(value);
            }
        }
Пример #4
0
        /// <summary>
        /// 在INI文件中,删除指定节点中的指定的键。
        /// </summary>
        /// <param name="iniFile">INI文件</param>
        /// <param name="section">节点</param>
        /// <param name="key">键</param>
        /// <returns>操作是否成功</returns>
        public static bool INIDeleteKey(string iniFile, string section, string key)
        {
            if (string.IsNullOrEmpty(section))
            {
                throw new ArgumentException("必须指定节点名称", "section");
            }

            if (string.IsNullOrEmpty(key))
            {
                throw new ArgumentException("必须指定键名称", "key");
            }

            return(INIOperationClass.WritePrivateProfileString(section, key, null, iniFile));
        }
Пример #5
0
        /// <summary>
        /// 在INI文件中,将指定的键值对写到指定的节点,如果已经存在则替换
        /// </summary>
        /// <param name="iniFile">INI文件</param>
        /// <param name="section">节点,如果不存在此节点,则创建此节点</param>
        /// <param name="items">键值对,多个用\0分隔,形如key1=value1\0key2=value2</param>
        /// <returns></returns>
        public static bool INIWriteItems(string iniFile, string section, string items)
        {
            if (string.IsNullOrEmpty(section))
            {
                throw new ArgumentException("必须指定节点名称", "section");
            }

            if (string.IsNullOrEmpty(items))
            {
                throw new ArgumentException("必须指定键值对", "items");
            }

            return(INIOperationClass.WritePrivateProfileSection(section, items, iniFile));
        }
Пример #6
0
        /// <summary>
        /// 在INI文件中,指定节点写入指定的键及值。如果已经存在,则替换。如果没有则创建。
        /// </summary>
        /// <param name="iniFile">INI文件</param>
        /// <param name="section">节点</param>
        /// <param name="key">键</param>
        /// <param name="value">值</param>
        /// <returns>操作是否成功</returns>
        public static bool INIWriteValue(string iniFile, string section, string key, string value)
        {
            if (string.IsNullOrEmpty(section))
            {
                throw new ArgumentException("必须指定节点名称", "section");
            }

            if (string.IsNullOrEmpty(key))
            {
                throw new ArgumentException("必须指定键名称", "key");
            }

            if (value == null)
            {
                throw new ArgumentException("值不能为null", "value");
            }

            return(INIOperationClass.WritePrivateProfileString(section, key, value, iniFile));
        }
Пример #7
0
        /// <summary>
        /// 获取INI文件中指定节点(Section)中的所有条目的Key列表
        /// </summary>
        /// <param name="iniFile">Ini文件</param>
        /// <param name="section">节点名称</param>
        /// <returns>如果没有内容,反回string[0]</returns>
        public static string[] INIGetAllItemKeys(string iniFile, string section)
        {
            string[]  value = new string[0];
            const int SIZE  = 1024 * 10;

            if (string.IsNullOrEmpty(section))
            {
                throw new ArgumentException("必须指定节点名称", "section");
            }

            char[] chars         = new char[SIZE];
            uint   bytesReturned = INIOperationClass.GetPrivateProfileString(section, null, null, chars, SIZE, iniFile);

            if (bytesReturned != 0)
            {
                value = new string(chars).Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
            }
            chars = null;

            return(value);
        }
Пример #8
0
        /// <summary>
        /// 读取ini以逗号分隔的数组键值
        /// </summary>
        /// <param name="section">节点</param>
        /// <param name="item">项</param>
        /// <returns>键值(数组)</returns>
        private static string[] GetSettingsValuePra(string section, string item)
        {
            string value = INIOperationClass.INIGetStringValue(Global.SettingIni, section, item, null);

            if (value == null)
            {
                throw new Exception();
            }
            else
            {
                int      count  = GetCharCountInString(value, ",") + 1;
                string[] s      = value.Split(new char[] { ',' }, StringSplitOptions.None);
                string[] output = new string[count];
                int      i;
                for (i = 0; i < count; i++)
                {
                    output[i] = s[i].Trim();
                }
                return(output);
            }
        }
Пример #9
0
        /// <summary>
        /// 获取INI文件中指定节点(Section)中的所有条目(key=value形式)
        /// </summary>
        /// <param name="iniFile">Ini文件</param>
        /// <param name="section">节点名称</param>
        /// <returns>指定节点中的所有项目,没有内容返回string[0]</returns>
        public static string[] INIGetAllItems(string iniFile, string section)
        {
            //返回值形式为 key=value,例如 Color=Red
            uint MAX_BUFFER = 32767;        //默认为32767

            string[] items = new string[0]; //返回值

            //分配内存
            IntPtr pReturnedString = Marshal.AllocCoTaskMem((int)MAX_BUFFER * sizeof(char));

            uint bytesReturned = INIOperationClass.GetPrivateProfileSection(section, pReturnedString, MAX_BUFFER, iniFile);

            if (!(bytesReturned == MAX_BUFFER - 2) || (bytesReturned == 0))
            {
                string returnedString = Marshal.PtrToStringAuto(pReturnedString, (int)bytesReturned);
                items = returnedString.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
            }

            Marshal.FreeCoTaskMem(pReturnedString);     //释放内存

            return(items);
        }
Пример #10
0
        /// <summary>
        /// 读取INI文件中指定INI文件中的所有节点名称(Section)
        /// </summary>
        /// <param name="iniFile">Ini文件</param>
        /// <returns>所有节点,没有内容返回string[0]</returns>
        public static string[] INIGetAllSectionNames(string iniFile)
        {
            uint MAX_BUFFER = 32767;           //默认为32767

            string[] sections = new string[0]; //返回值

            //申请内存
            IntPtr pReturnedString = Marshal.AllocCoTaskMem((int)MAX_BUFFER * sizeof(char));
            uint   bytesReturned   = INIOperationClass.GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, iniFile);

            if (bytesReturned != 0)
            {
                //读取指定内存的内容
                string local = Marshal.PtrToStringAuto(pReturnedString, (int)bytesReturned).ToString();

                //每个节点之间用\0分隔,末尾有一个\0
                sections = local.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
            }

            //释放内存
            Marshal.FreeCoTaskMem(pReturnedString);

            return(sections);
        }