• C# 读取ini文件 百度问问学习文档


    C# 读取ini文件

     
    10
    有多个section,现想读取整个ini文件和指定section下所有内容
    补充: 发布答案可以,请对准题目啊,我不要指定节点的内容,我知道!我要的是读取指定区域的内容,假设你不知道有哪些section,第一步遍历,得到所有section,第二步选择指定的section(多个)输出其下所有内容。我自己的做法是用读取文件的方法。
     

    满意答案

    灬伊1丶 4级 2011-09-08

    using System.Runtime.InteropServices;

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

      /// <summary>
            /// 写入INI文件
            /// </summary>
            /// <param name=^Section^>节点名称</param>
            /// <param name=^Key^>关键字</param>
            /// <param name=^Value^>值</param>
            /// <param name=^filepath^>INI文件路径</param>
            static public void IniWriteValue(string Section, string Key, string Value, string filepath)
            {
                WritePrivateProfileString(Section, Key, Value, filepath);
            }

            /// <summary>
            /// 读取INI文件
            /// </summary>
            /// <param name=^Section^>节点名称</param>
            /// <param name=^Key^>关键字</param>
            /// <param name=^filepath^>INI文件路径</param>
            /// <returns>值</returns>
            static public string IniReadValue(string Section, string Key, string filepath)
            {
                StringBuilder temp = new StringBuilder(255);
                int i = GetPrivateProfileString(Section, Key, "", temp,255, filepath);
                return temp.ToString();
            }

    ini 文档格式路径假设为 D:/SETUP.ini

    [SQL]

    SVRName=192.168.1.11SQL2005

    读取实例

    IniReadValue("SQL", "SVRName"," D:/SETUP.ini");

    这样读取出来的值是192.168.1.11SQL2005

    写的话类似

    IniReadValue("SQL", "SVRName","你要写入的值"," D:/SETUP.ini");

    补充:

     
    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();
        }
      }
    }

  • 相关阅读:
    【React Native】某个页面禁用物理返回键
    【React Native】DeviceEventEmitter监听通知及带参数传值
    转载【React Native代码】手写验证码倒计时组件
    【React Native】 中设置 APP 名称、应用图标、为安卓添加启动图
    【React Native错误集】* What went wrong: Execution failed for task ':app:installDebug'.
    【React Native错误集】Import fails with "Failed to execute 'ImportScripts' on 'WorkerGlobalScope'"
    【React Native错误集】Android error “Could not get BatchedBridge, make sure your bundle is packaged properly” on start of app
    「React Native笔记」在React的 setState 中操作数组和对象的多种方法(合集)
    【React Native】Error: Attribute application@allowBackup value=(false) from AndroidManifest.xml
    坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA?
  • 原文地址:https://www.cnblogs.com/meimao5211/p/3333976.html
Copyright © 2020-2023  润新知