C#操作ini文件的读写

首先创建一个IniFiles类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;

namespace IniFiles
{
    public class IniFiles
    {
        public string iniPath;

        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
        [DllImport("kernel32")]
        public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="INIPath">路径</param>
         public IniFiles(string INIPath)
        {
            iniPath = INIPath;

            if (!File.Exists(iniPath))
            {
                try
                {
                    File.Create(iniPath);
                }
                catch (Exception)
                { }
            }
        }

        /// <summary>
        /// 向ini文件中写入值
        /// </summary>
        /// <param name="Section">表头</param>
        /// <param name="Key">键</param>
        /// <param name="Value">值</param>
        public void IniWriteValue(string Section, string Key, string Value)
        {
            WritePrivateProfileString(Section, Key, Value, this.iniPath);
        }

        /// <summary>
        /// 从ini中得到int类型的值
        /// </summary>
        /// <param name="Section">表头</param>
        /// <param name="Key">键</param>
        /// <returns></returns>
        public int IniReadIntValue(string Section, string Key)
        {
            StringBuilder temp = new StringBuilder(1024);
            GetPrivateProfileString(Section, Key, "", temp, 1024, this.iniPath);
            if (temp.Length == 0)
            {
                WritePrivateProfileString(Section, Key, "0", this.iniPath);
            }
            return Convert.ToInt32(temp.ToString());
        }

        /// <summary>
        /// 从ini中得到double类型的值
        /// </summary>
        /// <param name="Section">表头</param>
        /// <param name="Key">键</param>
        /// <returns></returns>
        public double IniReadDoubleValue(string Section, string Key)
        {
            StringBuilder temp = new StringBuilder(1024);
            GetPrivateProfileString(Section, Key, "", temp, 1024, this.iniPath);
            if (temp.Length == 0)
            {
                WritePrivateProfileString(Section, Key, "0", this.iniPath);
            }
            return Convert.ToDouble(temp.ToString());

        }

        /// <summary>
        /// 从ini中得到string类型的值
        /// </summary>
        /// <param name="Section">表头</param>
        /// <param name="Key">键</param>
        /// <returns></returns>
        public string IniReadStringValue(string Section, string Key)
        {
            StringBuilder temp = new StringBuilder(1024);
            GetPrivateProfileString(Section, Key, "", temp, 1024, this.iniPath);
            if (temp.Length == 0)
            {
                WritePrivateProfileString(Section, Key, "0", this.iniPath);
            }
            return temp.ToString();
        }

        /// <summary>
        /// 判断文件是否存在
        /// </summary>
        /// <returns></returns>
        public bool ExistINIFile()
        {
            return File.Exists(iniPath);
        }

        /// <summary>
        /// 判断键值是否相同
        /// </summary>
        /// <param name="Section">表头</param>
        /// <param name="Key">键</param>
        /// <param name="Value">值</param>
        /// <param name="specBeefore">设定值</param>
        public void IniWriteValue(string Section, string Key, string Value, string specBeefore)
        {
            if (Value != specBeefore)
            {
                WritePrivateProfileString(Section, Key, Value, this.iniPath);
            }
        }
    }
}

在winform中对这个方法进行引用和调用

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using IniFiles;//我们创建的类


namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //IniFiles ini = new IniFiles(AppDomain.CurrentDomain.BaseDirectory + "apec.ini");
        IniFiles.IniFiles ini;

        private void Form1_Load(object sender, EventArgs e)
        {
             //窗体加载事件中,创建这个ini文件,并向里面写入值
            ini = new IniFiles.IniFiles(AppDomain.CurrentDomain.BaseDirectory + "apec.ini");
            ini.IniWriteValue("row", "2", "3");
        }

        private void button1_Click(object sender, EventArgs e)
        {

            //ini.IniWriteValue("row",

        }

        private void button2_Click(object sender, EventArgs e)
        {
            //  double a;
             //从ini中得到刚才写入的值,这里label1.text是string类型,所以用ini.IniReadStringValue
             //double类型的用ini.IniReadDoubleValue
             //int类型的用ini.IniReadIntValue
            label1.Text = ini.IniReadStringValue("row", "2");

        }
    }
}
posted @ 2020-12-07 10:35  冰糖小袁子  阅读(587)  评论(0)    收藏  举报