当前位置: 首页 > news >正文

【转】ini载入保存类,操作INI配置文件方便的很

/******************************************************************
 * 
 *  ^_^ 恶猫 独门商标 挖哈哈
 * 
 *  QQ:\>23559055 
 * 
 *  Site:\>http://emao.me  
 * 
 * ================================================================
 * 
 * 说明:
 * 
 *        1.命名空间: Emao_CfgManager
 *          类名    : CfgManager
 * 
 *         2.声明: CfgManager cm = new CfgManager();
 * 
 *        3.具体方法自己看代码吧哈。简单的很。
 *                
 *                  分别是:add() readAll() writeAll()
 * 
 ******************************************************************/
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Emao_CfgManager
{
    public class CfgManager
    {
        private Dictionary<string ,string> dict= new Dictionary<string,string>();
        private string filename = Application.StartupPath + @"\config.ini";

        #region API
        [DllImport("kernel32.dll")]
        public extern static int GetPrivateProfileString(string segName, string keyName, string sDefault, byte[] bt, int nSize, string fileName);
        [DllImport("kernel32.dll")]
        public extern static int WritePrivateProfileString(string segName, string keyName, string sValue, string fileName);

        [DllImport("kernel32.dll")]
        public extern static int GetPrivateProfileSection(string segName, StringBuilder buffer, int nSize, string fileName);
        [DllImport("kernel32.dll")]
        public extern static int WritePrivateProfileSection(string segName, string sValue, string fileName);


        #endregion

        #region constructure
        public CfgManager()
        {
            ReadAll();
        }
        public CfgManager(string inipath)
        {
            filename = inipath;
            ReadAll();
        }
        #endregion

        #region method
        public int Add(object key, object value)
        {
            if (this.dict.ContainsKey(key.ToString()))
                this.dict[key.ToString()] = value.ToString();
            else
                this.dict.Add(key.ToString(), value.ToString());
            return this.dict.Count;
        }
        public void ReadAll()
        {
            this.dict.Clear();
            //读取ini文件所有
            StringBuilder sb = new StringBuilder(25500);
            Byte[] bt = new Byte[25000];
            int len = GetPrivateProfileString("Config", null, "", bt, bt.GetUpperBound(0), filename);
            if (len != 0)
            {
                int start = 0;
                for (int i = 0; i < len; i++)
                {
                    if ((bt[i] == 0) && ((i - start) > 0))
                    {
                        String s = Encoding.GetEncoding(0).GetString(bt, start, i - start);
                        Byte[] temp = new Byte[25500];
                        int i2 = GetPrivateProfileString("Config", s, "", temp, 25500, filename);
                        string value = System.Text.Encoding.Default.GetString(temp).Replace('\0', ' ');
                        this.dict.Add(s, value.TrimEnd());
                        start = i + 1;
                    }
                }
            }
        }
        public void ReadAll(string sectionName)
        {
            this.dict.Clear();
            //读取指定节点
        }
        public void WriteAll()
        {
            foreach (var dic in dict)
            {
                WritePrivateProfileString("Config",dic.Key,dic.Value,filename);
            }
        }
        public string this[string key]
        {
            get
            {
                if (key.Trim() == "")
                {
                    return "";
                }
                if (!this.dict.ContainsKey(key)) return "";
                return this.dict[key];
            }
            set
            {
                if (!this.dict.ContainsKey(key))
                    this.dict.Add(key, value);
                else
                    this.dict[key] = value;
            }
        }
        #endregion

        #region Function
        
        #endregion

        #region property
        public int Count
        {
            get { return this.dict.Count; }
        }
        #endregion

    }
}


原文:http://www.oschina.net/code/snippet_191468_13277

转载于:https://www.cnblogs.com/anduinlothar/p/3523396.html

相关文章:

  • PostgreSQL 连接的问题
  • 珍爱之礼 美妙感受
  • Python Flask-Mail环境变量配置
  • 内表生成XML简单实例
  • nginx基础
  • java 编程性能调优
  • 简单实现一个textarea自适应高度
  • 苹果数据记录之详细让人不寒而栗
  • TCP的三次握手(建立连接)和四次挥手(关闭连接)
  • 0基础学习移动端适配
  • 产品经理工作职责
  • 【SpringBoot】URL路径映射规则
  • JavaScript DOM高级程序设计 3.6 实例 将HTML代码转换成DOM代码(附源码)--我要坚持到底!...
  • Java之多线程优先级基础
  • WCF应用场景
  • [deviceone开发]-do_Webview的基本示例
  • 【mysql】环境安装、服务启动、密码设置
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Bytom交易说明(账户管理模式)
  • Codepen 每日精选(2018-3-25)
  • Go 语言编译器的 //go: 详解
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Windows Containers 大冒险: 容器网络
  • 模型微调
  • 如何合理的规划jvm性能调优
  • 深入浏览器事件循环的本质
  • 学习HTTP相关知识笔记
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 云大使推广中的常见热门问题
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​queue --- 一个同步的队列类​
  • # Java NIO(一)FileChannel
  • # 数论-逆元
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $$$$GB2312-80区位编码表$$$$
  • (007)XHTML文档之标题——h1~h6
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (区间dp) (经典例题) 石子合并
  • (四)图像的%2线性拉伸
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转载)利用webkit抓取动态网页和链接
  • ./configure,make,make install的作用
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 指南:抽象化实现的基类
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • [ C++ ] STL---string类的使用指南
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [.NET]桃源网络硬盘 v7.4
  • [100天算法】-不同路径 III(day 73)
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——