配置文件读写操作(.ini)

原创 2017年07月12日 13:40:32

使用C#实现对配置文件(config.ini)的读写操作;
以下为基本操作函数源码,包括不同数据类型参数的读写:string、bool、int、double

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

public class FileIni
    {
        [DllImport("kernel32.dll")]
        public static extern IntPtr _lopen(string lpPathName, int iReadWrite);
        [DllImport("kernel32.dll")]
        public static extern bool CloseHandle(IntPtr hObject);
        public const int OF_READWRITE = 2;
        public const int OF_SHARE_DENY_NONE = 0x40;
        public static readonly IntPtr HFILE_ERROR = new IntPtr(-1);

        //判断文件是否被占用 占用=true 未占用 = false
        public static bool isFileOccupied(string path)
        {
            if (!File.Exists(path))
                return true;
            IntPtr vHandle = _lopen(path, OF_READWRITE | OF_SHARE_DENY_NONE);
            if (vHandle == HFILE_ERROR)
                return true;
            CloseHandle(vHandle);
            return false;
        }

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

        public static bool isFileExists(string path)
        {
            if (!(File.Exists(path)))
            {
                MessageBox.Show("文件:" + path + "不存在", "ini文件不存在");
                return false;
            }
            return true;
        }

        //=====================//=====================//=====================Write data
        #region  写INI参数
        public static void WriteString(string path, string section, string key, string value)
        {
            // section=配置节,key=键名,value=键值,path=路径
            WritePrivateProfileString(section, key, value, path);
        }
        public static void WriteInt(string path, string section, string key, int value = 0)
        {
            string strRead = ReadString(path, section, key);
            string[] strArr = strRead.Split(new char[] { ';' });
            string strNote = ";";
            string strWrite;
            if (strArr.Length > 1)//保留原有注释
            {
                for (int i = 1; i < strArr.Length; i++)
                    strNote += strArr[i];
                strWrite = value.ToString() + strNote;
            }
            else
            {
                strWrite = value.ToString();
            }
            WritePrivateProfileString(section, key, strWrite, path);
        }
        public static void WriteDouble(string path, string section, string key, double value = 0)
        {
            string strRead = ReadString(path, section, key);
            string[] strArr = strRead.Split(new char[] { ';' });
            string strNote = ";";
            string strWrite;
            if (strArr.Length > 1)//保留原有注释
            {
                for (int i = 1; i < strArr.Length; i++)
                    strNote += strArr[i];
                strWrite = value.ToString() + strNote;
            }
            else
            {
                strWrite = value.ToString();
            }
            WritePrivateProfileString(section, key, strWrite, path);
        }
        public static void WriteBool(string path, string section, string key, bool value = false)
        {
            string strValue = (value ? "1" : "0");
            string strRead = ReadString(path, section, key);
            string[] strArr = strRead.Split(new char[] { ';' });
            string strNote = ";";
            string strWrite;
            if (strArr.Length > 1)//保留原有注释
            {
                for (int i = 1; i < strArr.Length; i++)
                    strNote += strArr[i];
                strWrite = strValue + strNote;
            }
            else
            {
                strWrite = strValue;
            }
            WritePrivateProfileString(section, key, strWrite, path);
        }
        #endregion

        //=====================//=====================//=====================Read data
        #region  读INI参数
        public static string ReadString(string path, string section, string key)
        {
            // 每次从ini中读取多少字节
            System.Text.StringBuilder temp = new System.Text.StringBuilder(255);
            // section=配置节,key=键名,temp=上面,path=路径
            GetPrivateProfileString(section, key, "", temp, 255, path);
            String str = temp.ToString();
            string[] strArr = str.Split(new char[] { ';' });
            string strRead = "";
            if (strArr.Length > 0)
            {
                strRead = strArr[0];
            }
            return strRead;
        }
        public static int ReadInt(string path, string section, string key, int defValue = 0)
        {
            return GetPrivateProfileInt(section, key, defValue, path);
        }
        public static double ReadDouble(string path, string section, string key, double defValue = 0)
        {
            System.Text.StringBuilder temp = new System.Text.StringBuilder(255);
            GetPrivateProfileString(section, key, defValue.ToString(), temp, 255, path);
            String str = temp.ToString();
            string[] strArr = str.Split(new char[] { ';' });
            double ReData;
            if (strArr.Length > 0)
            {
                ReData = Convert.ToDouble(strArr[0]);
            }
            else
            {
                ReData = defValue;
            }
            return ReData;
        }
        public static bool ReadBool(string path, string section, string key, int defValue = 0)
        {
            int val = GetPrivateProfileInt(section, key, defValue, path);
            if (val != 0)
                return true;
            else
                return false;
        }
        #endregion
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

读写配置文件 ini

首先介绍两个函数:读取 ini 文件:DWORD GetPrivateProfileString(  LPCTSTR lpAppName,        // points to section na...
  • livewater
  • livewater
  • 2008年09月01日 11:30
  • 264

INI配置文件读写工具类

INI配置文件读写工具类 应该使用“单例”来创建实例,以提高效率 考虑使用Nini或Win32 api调用实现,好处:稳定代码,速度更快 Nini还可以读取配置文件和注册表...
  • yongyong521
  • yongyong521
  • 2016年08月18日 16:22
  • 763

ini配置文件读写操作入门

ini配置文件读写操作入门
  • AUTO1993
  • AUTO1993
  • 2017年01月02日 16:38
  • 264

C#进行INI文件的读写

using System; using System.IO; using System.Runtime.InteropServices; using System.Text; using System...
  • liucherish
  • liucherish
  • 2017年02月17日 17:06
  • 1602

【工具类】-ini配置文件读写操作类

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R...
  • feiba527
  • feiba527
  • 2017年05月24日 16:18
  • 94

C++实现解析INI配置文件

INI配置文件如下: [common] mysql_ip = 127.0.0.1 mysql_port = 3306 mysql_user = root mysql_passwd = root se...
  • liangzhao_jay
  • liangzhao_jay
  • 2016年03月16日 09:54
  • 2469

ini配置文件读写实现

头文件: #pragma once class OperateIni { public: OperateIni(void); ~OperateIni(void); //获取字符串,不带引...
  • qq229596421
  • qq229596421
  • 2017年02月09日 16:32
  • 330

UWSGI配置文件---ini和xml示例

一   conf.ini文件: [uwsgi] http = $(HOSTNAME):9033 http-keepalive = 1 pythonpath = ../ module = service...
  • crazyhacking
  • crazyhacking
  • 2014年01月07日 13:36
  • 14234

XML 和 ini作为配置文件优缺点

XML 和 ini作为配置文件优缺点
  • saiolive
  • saiolive
  • 2016年06月18日 23:06
  • 3972

java读取和修改ini配置文件

/** ConfigurationFile.java** Created on 2009年4月15日, 下午1:36** To change this template, choose Tools |...
  • zwhfyy
  • zwhfyy
  • 2009年04月28日 13:38
  • 2969
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:配置文件读写操作(.ini)
举报原因:
原因补充:

(最多只允许输入30个字)