• c# 利用动态库DllImport("kernel32")读写ini文件(提供Dmo下载)


    c# 利用动态库DllImport("kernel32")读写ini文件

      自从读了设计模式,真的会改变一个程序员的习惯。我觉得嘛,经验也可以从一个人的习惯看得出来,看他的代码编写习惯能看出一个程序员的经验。说啥呢,为啥又会说说设计模式去了呢,好吧,咱是来讨论读写ini文件的。
      为什么要来讨论读写ini文件呢,难道有数据库我们就不用读写文件了吗,什么数据都从数据库读取出来吗,有些东西是根据客户的习惯,就没必要去读取数据库了,或者说,比如你要做一个记住密码的功能,如果在web端,你还可以用cookie这东西,但是要是winform呢,这时候ini文件就可以派上用场了。我们可以把用户和密码存在ini文件里。
      ini的格式由节、键、值组成,例:节[section] 参数(键=值) name=value。当然,一个节里面可以有几对参数。

    先来看INI文件操作类代码:

    /// <summary>
        /// INI文件操作类 
        /// </summary>
        public class INIClass
        {
            [DllImport("kernel32")]
            private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);
            [DllImport("kernel32")]
            private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
            /// <summary>
            /// ini文件路径
            /// </summary>
            public string inipath;
            public INIClass()
            { }
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="INIPath">ini文件路径</param>
            public INIClass(string INIPath)
            {
                this.inipath = INIPath;
            }
            /// <summary>
            /// 写入INI文件
            /// </summary>
            /// <param name="section">项目名称(如[TypeName])</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文件
            /// </summary>
            /// <param name="section">项目名称(如[TypeName])</param>
            /// <param name="key"></param>
            /// <returns>string</returns>
            public string IniReadValue(string section, string key)
            {
                StringBuilder temp = new StringBuilder(500);
                int i = GetPrivateProfileString(section, key, "", temp, 500, this.inipath);
                return temp.ToString();
            }
            /// <summary>
            /// 验证文件是否存在
            /// </summary>
            /// <returns>bool</returns>
            public bool ExistINIFile()
            {
                return File.Exists(this.inipath);
            }
        }

    下面是运行实例代码:

     public class IniClassDemo
        {
            private static readonly string filePath = @"document/testdemo.ini";
            INIClass iC = new INIClass(filePath);
            //判断文件是否存在
            public bool IsExist()
            {
                return iC.ExistINIFile();
            }
            //写入INI文件
            public void IniWrite(string section,string key,string value)
            {
                iC.IniWriteValue(section, key, value);
            }
            //读取INI文件内容
            public string IniRead(string section,string key)
            {
                string temp = iC.IniReadValue(section, key);
                return temp;
            }
            public void GoTo()
            {
                if (IsExist())
                {
                    Console.WriteLine("文件存在 ");
                    IniWrite("test01", "aib", "gdaib");
                    Console.WriteLine("写入文件完毕,section=test01,key=aib,value=gdaib");
                    Console.WriteLine("读取刚写的文件,内容为: " + IniRead("test01", "aib"));
                }
                else
                {
                    Console.WriteLine("文件不存在!");
                }
            }
            
        }

    我用的是控制台程序,然后再Program里
        class Program
        {
            static void Main(string[] args)
            {
                IniClassDemo icdemo = new IniClassDemo();
                icdemo.GoTo();
            }
        }

      上面就是实现对Ini问价的读取操作,希望能帮到有需要的人啊。

  • 相关阅读:
    hdu4405Aeroplane chess 概率dp水题
    【基础算法】排序-复杂排序之二(找出第K大的数)
    java代码实现输出指定以.java结尾的文件的绝对路径
    算法 Heap sort
    hdu2141Can you find it?
    c/c++:回调函数
    怎样在编译的时候,控制删除apk不用的资源?
    javascript原型的改动与重写(覆盖)区别
    深入理解Tomcat虚拟文件夹
    C++设计模式之代理模式
  • 原文地址:https://www.cnblogs.com/zknu/p/3397326.html
Copyright © 2020-2023  润新知