当前位置: 首页 > 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应用场景
  • #Java异常处理
  • 【EOS】Cleos基础
  • 【刷算法】从上往下打印二叉树
  • 30秒的PHP代码片段(1)数组 - Array
  • CEF与代理
  • JS笔记四:作用域、变量(函数)提升
  • js中forEach回调同异步问题
  • leetcode98. Validate Binary Search Tree
  • React+TypeScript入门
  • React16时代,该用什么姿势写 React ?
  • VuePress 静态网站生成
  • 当SetTimeout遇到了字符串
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 深入 Nginx 之配置篇
  • 探索 JS 中的模块化
  • 责任链模式的两种实现
  • 自动记录MySQL慢查询快照脚本
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (ZT)薛涌:谈贫说富
  • (二十三)Flask之高频面试点
  • (三分钟)速览传统边缘检测算子
  • (一)UDP基本编程步骤
  • .form文件_一篇文章学会文件上传
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET Core跨平台微服务学习资源
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .net6 webapi log4net完整配置使用流程
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [Android 13]Input系列--获取触摸窗口
  • [Asp.net mvc]国际化
  • [BeginCTF]真龙之力
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C# 开发技巧]实现属于自己的截图工具
  • [C++打怪升级]--学习总目录