现在的位置: 首页 > 综合 > 正文

c# 操作ini文件

2012年01月12日 ⁄ 综合 ⁄ 共 5992字 ⁄ 字号 评论关闭
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;
        }

    }

 

抱歉!评论已关闭.