c# 操作ini文件

简介: 原文:c# 操作ini文件INI文件是一种按照特点方式排列的文本文件。每一个INI文件构成都非常类似,由若干段落(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,等 号右边的就是关键字对应的值(value)。
原文: 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 ;
        }

    }

 

目录
相关文章
|
1月前
|
监控 安全 C#
使用C#如何监控选定文件夹中文件的变动情况?
使用C#如何监控选定文件夹中文件的变动情况?
93 19
|
1月前
|
编译器 C# Windows
C#基础:手动编译一个.cs源代码文件并生成.exe可执行文件
通过上述步骤,应该能够高效准确地编译C#源代码并生成相应的可执行文件。此外,这一过程强调了对命令行编译器的理解,这在调试和自动化编译流程中是非常重要的。
49 2
|
1月前
|
文字识别 C# Python
使用C#将几个Excel文件合并去重分类
使用C#将几个Excel文件合并去重分类
20 3
|
30天前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
|
30天前
|
C#
C# 写日志文件
C# 写日志文件
38 0
|
3月前
|
C#
【C#】C#读写Excel文件
【C#】C#读写Excel文件
54 1
|
3月前
|
JavaScript 前端开发 C#
初识Unity——创建代码、场景以及五个常用面板(创建C#代码、打开代码文件、场景的创建、Project、Hierarchy、Inspector、Scene、Game )
初识Unity——创建代码、场景以及五个常用面板(创建C#代码、打开代码文件、场景的创建、Project、Hierarchy、Inspector、Scene、Game )
64 0
|
4月前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
82 1
|
4月前
|
C#
C#获取文件基本信息,文件名称、修改时间、文件路径等
C#获取文件基本信息,文件名称、修改时间、文件路径等
42 0