博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# ini文件读写类
阅读量:7228 次
发布时间:2019-06-29

本文共 6892 字,大约阅读时间需要 22 分钟。

hot3.png

using System;using System.IO;using System.Runtime.InteropServices;using System.Text;using System.Collections;using System.Collections.Specialized;namespace wuyisky{          /// IniFiles的类     ///      public class IniFiles    {        public string FileName; //INI文件名         //声明读写INI文件的API函数         [DllImport("kernel32")]        private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);        [DllImport("kernel32")]        private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath);        //类的构造函数,传递INI文件名         public IniFiles(string AFileName)        {            // 判断文件是否存在             FileInfo fileInfo = new FileInfo(AFileName);            //Todo:搞清枚举的用法             if ((!fileInfo.Exists))            { //|| (FileAttributes.Directory in fileInfo.Attributes))                 //文件不存在,建立文件                 System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default);                try                {                    sw.Write("#表格配置档案");                    sw.Close();                }                catch                {                    throw (new ApplicationException("Ini文件不存在"));                }            }            //必须是完全路径,不能是相对路径             FileName = fileInfo.FullName;        }        //写INI文件         public void WriteString(string Section, string Ident, string Value)        {            if (!WritePrivateProfileString(Section, Ident, Value, FileName))            {                               throw (new ApplicationException("写Ini文件出错"));            }        }        //读取INI文件指定         public string ReadString(string Section, string Ident, string Default)        {            Byte[] Buffer = new Byte[65535];            int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName);            //必须设定0(系统默认的代码页)的编码方式,否则无法支持中文             string s = Encoding.GetEncoding(0).GetString(Buffer);            s = s.Substring(0, bufLen);            return s.Trim();        }        //读整数         public int ReadInteger(string Section, string Ident, int Default)        {            string intStr = ReadString(Section, Ident, Convert.ToString(Default));            try            {                return Convert.ToInt32(intStr);            }            catch (Exception ex)            {                Console.WriteLine(ex.Message);                return Default;            }        }        //写整数         public void WriteInteger(string Section, string Ident, int Value)        {            WriteString(Section, Ident, Value.ToString());        }        //读布尔         public bool ReadBool(string Section, string Ident, bool Default)        {            try            {                return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default)));            }            catch (Exception ex)            {                Console.WriteLine(ex.Message);                return Default;            }        }        //写Bool         public void WriteBool(string Section, string Ident, bool Value)        {            WriteString(Section, Ident, Convert.ToString(Value));        }        //从Ini文件中,将指定的Section名称中的所有Ident添加到列表中         public void ReadSection(string Section, StringCollection Idents)        {            Byte[] Buffer = new Byte[16384];            //Idents.Clear();             int bufLen = GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0),              FileName);            //对Section进行解析             GetStringsFromBuffer(Buffer, bufLen, Idents);        }        private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings)        {            Strings.Clear();            if (bufLen != 0)            {                int start = 0;                for (int i = 0; i < bufLen; i++)                {                    if ((Buffer[i] == 0) && ((i - start) > 0))                    {                        String s = Encoding.GetEncoding(0).GetString(Buffer, start, i - start);                        Strings.Add(s);                        start = i + 1;                    }                }            }        }        //从Ini文件中,读取所有的Sections的名称         public void ReadSections(StringCollection SectionList)        {            //Note:必须得用Bytes来实现,StringBuilder只能取到第一个Section             byte[] Buffer = new byte[65535];            int bufLen = 0;            bufLen = GetPrivateProfileString(null, null, null, Buffer,              Buffer.GetUpperBound(0), FileName);            GetStringsFromBuffer(Buffer, bufLen, SectionList);        }        //读取指定的Section的所有Value到列表中         public void ReadSectionValues(string Section, NameValueCollection Values)        {            StringCollection KeyList = new StringCollection();            ReadSection(Section, KeyList);            Values.Clear();            foreach (string key in KeyList)            {                Values.Add(key, ReadString(Section, key, ""));                            }        }        /**/读取指定的Section的所有Value到列表中,         //public void ReadSectionValues(string Section, NameValueCollection Values,char splitString)        //{   string sectionValue;        //    string[] sectionValueSplit;        //    StringCollection KeyList = new StringCollection();        //    ReadSection(Section, KeyList);        //    Values.Clear();        //    foreach (string key in KeyList)        //    {           //        sectionValue=ReadString(Section, key, "");        //        sectionValueSplit=sectionValue.Split(splitString);        //        Values.Add(key, sectionValueSplit[0].ToString(),sectionValueSplit[1].ToString());                       //    }        //}        //清除某个Section         public void EraseSection(string Section)        {            //             if (!WritePrivateProfileString(Section, null, null, FileName))            {                throw (new ApplicationException("无法清除Ini文件中的Section"));            }        }        //删除某个Section下的键         public void DeleteKey(string Section, string Ident)        {            WritePrivateProfileString(Section, Ident, null, FileName);        }        //Note:对于Win9X,来说需要实现UpdateFile方法将缓冲中的数据写入文件         //在Win NT, 2000和XP上,都是直接写文件,没有缓冲,所以,无须实现UpdateFile         //执行完对Ini文件的修改之后,应该调用本方法更新缓冲区。         public void UpdateFile()        {            WritePrivateProfileString(null, null, null, FileName);        }        //检查某个Section下的某个键值是否存在         public bool ValueExists(string Section, string Ident)        {            //             StringCollection Idents = new StringCollection();            ReadSection(Section, Idents);            return Idents.IndexOf(Ident) > -1;        }        //确保资源的释放         ~IniFiles()        {            UpdateFile();        }    }}
 

转载于:https://my.oschina.net/thinkgem/blog/713446

你可能感兴趣的文章
Apache2.2.17源码编译安装以及配置虚拟主机
查看>>
2017年开发语言排名
查看>>
读二进制表的显示 Binary Watch
查看>>
我的友情链接
查看>>
linux基础:10、基础命令(4)
查看>>
linux中强大的screen命令
查看>>
放开那个程序员
查看>>
构建高性能数据库缓存之Redis(一)
查看>>
测试驱动开发
查看>>
解决MySQL不允许从远程访问
查看>>
puppet介绍及基于httpd实例部署
查看>>
UML常用工具之三--RSA
查看>>
iis7 appcmd的基础命令及简单用法
查看>>
用脚本实现移动某目录下文件名符合指定规则的文件到另一个目录的功能
查看>>
关于SQL镜像配置报错
查看>>
终于找到解决方案了,Qt的Model/View Framework解析
查看>>
线程信息的获取和设置
查看>>
Databricks Scala 编程风格指南
查看>>
Tkinter,label内容随多选框变化
查看>>
PHP开发中的数据类型 ( 第3篇 ) :Heaps
查看>>