• c# 操作ini文件


    INI文件是一种按照特点方式排列的文本文件。每一个INI文件构成都非常类似,由若干段落(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,等

    号右边的就是关键字对应的值(value)。其一般形式如下:
    [section1]
     keyword1=value1
     keyword2=value2
     keyword3=value3
    [section2]
     keyword1=value1
     keyword2=value2
    class Program
        {
            [DllImport(
    "kernel32")]
            
    private  static extern long WritePrivateProfileString (string section ,string key , string val ,string filepath);
            
    //参数说明:section:INI文件中的段落;key:INI文件中的关键字;val:INI文件中关键字的数值;filePath:INI文件的完整的路径和名称。
            [DllImport ("kernel32")]
            
    private static extern int GetPrivateProfileString (string section , string key , string def , StringBuilder retVal , int size , string filePath ) ;
            
    //参数说明:section:INI文件中的段落名称;key:INI文件中的关键字;def:无法读取时候时候的缺省数值;retVal:读取数值;size:数值的大小;filePath:INI文件的完整路径和名称。
            public static void Main(string[] args)
            {
                
                
    string section="database";
                
    string key="sql";
                
    //string value="server.;database=pubs;uid=sa;pwd=";
                string fileName="d:\\config.ini";
                
                
    try
                {
                    
    //写入ini节点
                    
    //WritePrivateProfileString(section,key,value,fileName);
                    
                    
    //读取ini节点
                    StringBuilder sb=new StringBuilder(255);
                    GetPrivateProfileString(section,key,
    "无法读取",sb,255,fileName);
                    
                    Console.WriteLine(sb.ToString());
                    
                }
    catch(Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
                
                Console.Write(
    "Press any key to continue . . . ");
                Console.ReadKey(
    true);
            }
            
        }

    整理出ini文件操作辅且类

     /// <summary>
        
    /// 读写INI文件的类。
        
    /// </summary>
        public class INIHelper
        {
            
    // 读写INI文件相关。
            [DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileString", CharSet = CharSet.Ansi)]
            
    public static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
            [DllImport(
    "kernel32.dll", EntryPoint = "GetPrivateProfileString", CharSet = CharSet.Ansi)]
            
    public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

            [DllImport(
    "kernel32.dll", EntryPoint = "GetPrivateProfileSectionNames", CharSet = CharSet.Ansi)]
            
    public static extern int GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer, int nSize, string filePath);
            
            [DllImport(
    "KERNEL32.DLL ", EntryPoint = "GetPrivateProfileSection", CharSet = CharSet.Ansi)]
            
    public static extern int GetPrivateProfileSection(string lpAppName, byte[] lpReturnedString, int nSize, string filePath);


            
    /// <summary>
            
    /// 向INI写入数据。
            
    /// </summary>
            
    /// <PARAM name="Section">节点名。</PARAM>
            
    /// <PARAM name="Key">键名。</PARAM>
            
    /// <PARAM name="Value">值名。</PARAM>
            public static void Write(string Section, string Key, string Value, string path)
            {
                WritePrivateProfileString(Section, Key, Value, path);
            }


            
    /// <summary>
            
    /// 读取INI数据。
            
    /// </summary>
            
    /// <PARAM name="Section">节点名。</PARAM>
            
    /// <PARAM name="Key">键名。</PARAM>
            
    /// <PARAM name="Path">值名。</PARAM>
            
    /// <returns>相应的值。</returns>
            public static string Read(string Section, string Key, string path)
            {
                StringBuilder temp 
    = new StringBuilder(255);
                
    int i = GetPrivateProfileString(Section, Key, "", temp, 255, path);
                
    return temp.ToString();
            }

            
    /// <summary>
            
    /// 读取一个ini里面所有的节
            
    /// </summary>
            
    /// <param name="sections"></param>
            
    /// <param name="path"></param>
            
    /// <returns></returns>
            public static int GetAllSectionNames(out string[] sections, string path)
            {
                
    int MAX_BUFFER = 32767;
                IntPtr pReturnedString 
    = Marshal.AllocCoTaskMem(MAX_BUFFER);
                
    int bytesReturned = GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, path);
                
    if (bytesReturned == 0)
                {
                    sections 
    = null;
                    
    return -1;
                }
                
    string local = Marshal.PtrToStringAnsi(pReturnedString, (int)bytesReturned).ToString();
                Marshal.FreeCoTaskMem(pReturnedString);
                
    //use of Substring below removes terminating null for split
                sections = local.Substring(0, local.Length - 1).Split('\0');
                
    return 0;
            }

            
    /// <summary>
            
    /// 得到某个节点下面所有的key和value组合
            
    /// </summary>
            
    /// <param name="section"></param>
            
    /// <param name="keys"></param>
            
    /// <param name="values"></param>
            
    /// <param name="path"></param>
            
    /// <returns></returns>
            public static int GetAllKeyValues(string section, out string[] keys, out string[] values, string path)
            {
                
    byte[] b = new byte[65535];

                GetPrivateProfileSection(section, b, b.Length, path);
                
    string s = System.Text.Encoding.Default.GetString(b);
                
    string[] tmp = s.Split((char)0);
                ArrayList result 
    = new ArrayList();
                
    foreach (string r in tmp)
                {
                    
    if (r != string.Empty)
                        result.Add(r);
                }
                keys 
    = new string[result.Count];
                values 
    = new string[result.Count];
                
    for (int i = 0; i < result.Count; i++)
                {
                    
    string[] item = result[i].ToString().Split(new char[] { '=' });
                    
    if (item.Length == 2)
                    {
                        keys[i] 
    = item[0].Trim();
                        values[i] 
    = item[1].Trim();
                    }
                    
    else if (item.Length == 1)
                    {
                        keys[i] 
    = item[0].Trim();
                        values[i] 
    = "";
                    }
                    
    else if (item.Length == 0)
                    {
                        keys[i] 
    = "";
                        values[i] 
    = "";
                    }
                }

                
    return 0;
            }

        }
  • 相关阅读:
    C语言ll作业01
    C语言寒假大作战04
    C语言寒假大作战03
    C语言寒假大作战02
    C语言寒假大作战01
    C语言I作业12—学期总结
    C语言I博客作业11
    C语言I博客作业10
    第三章预习笔记-运算方法和运算部件
    非数值数据的编码表示
  • 原文地址:https://www.cnblogs.com/wenming205/p/2044131.html
Copyright © 2020-2023  润新知