配置文件读写操作(.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
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

易语言配置文件读写操作

  • 2013年10月24日 12:50
  • 4KB
  • 下载

INI文件读写操作类

  • 2009年03月03日 21:37
  • 5KB
  • 下载

bash 脚本实现的配置文件(ini/inc.sh)的读写操作

这两个bash 函数是以前写的,目的是对一个已经存在的ini配置文件进行修改和读取,当然实在Linux Bash Shell下进行的: 例如一个配置文件 config.ini # config.in...
  • wxqee
  • wxqee
  • 2012年06月08日 10:00
  • 6468

文件读写操作

  • 2015年12月31日 21:51
  • 6KB
  • 下载

C#文件读写操作

  • 2014年05月10日 23:04
  • 256KB
  • 下载

java配置文件的读写操作

java中有一中配置文件properties,可以放置一些数据。 写入配置文件:           因为此文件中数据都是以键值对的形式存在,所以写入需要key和value。        ...

C#文件读写操作详解

  • 2012年12月21日 10:23
  • 10KB
  • 下载

文件读写操作demo

  • 2017年02月20日 11:21
  • 969KB
  • 下载

【工作总结】一组关于key=value类似配置文件的读写操作函数

工作中经常会碰到解析配置文件的时候,经常会碰到,这里记录下来,用于常用。 配置文件格式如下: #key1 key1=value1 #key2 key2=value2 ......

C++ 的各种文件读写操作总结

  • 2012年09月15日 11:17
  • 76KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:配置文件读写操作(.ini)
举报原因:
原因补充:

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