注:原创作者我不记得了,反正不是我,我原来是搞delphi的,编写这个代码的作者也是写delphi,所以我喜欢用这个类,和delphi提供的TIniFile一样的用法。以下是源码,带全部注解。
C#一个Ini操作类using System;
C#一个Ini操作类
using System.IO;
C#一个Ini操作类
using System.Runtime.InteropServices;
C#一个Ini操作类
using System.Text;
C#一个Ini操作类
using System.Collections;
C#一个Ini操作类
using System.Collections.Specialized;
C#一个Ini操作类
C#一个Ini操作类
namespace DataGridEx
{    

C#一个Ini操作类  
/// IniFiles的类
C#一个Ini操作类  
/// </summary>
{
C#一个Ini操作类    public string FileName; //INI文件名
C#一个Ini操作类    
//声明读写INI文件的API函数
C#一个Ini操作类
    [DllImport("kernel32")]
C#一个Ini操作类    
private static extern bool WritePrivateProfileString(string section,string key,string val,string filePath);
C#一个Ini操作类    [DllImport(
"kernel32")]
C#一个Ini操作类    
private static extern int GetPrivateProfileString(string section,string key,string def, byte[] retVal,int size,string filePath);
C#一个Ini操作类    
//类的构造函数,传递INI文件名
{
C#一个Ini操作类      
// 判断文件是否存在
C#一个Ini操作类
      FileInfo fileInfo=new FileInfo(AFileName);
C#一个Ini操作类      
//Todo:搞清枚举的用法
|| (FileAttributes.Directory in fileInfo.Attributes))
C#一个Ini操作类        
//文件不存在,建立文件
C#一个Ini操作类
        System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName,false,System.Text.Encoding.Default);
{
C#一个Ini操作类          sw.Write(
"#表格配置档案");
C#一个Ini操作类          sw.Close();
{
C#一个Ini操作类          
throw(new ApplicationException("Ini文件不存在"));
C#一个Ini操作类        }

C#一个Ini操作类      }

C#一个Ini操作类      
//必须是完全路径,不能是相对路径
C#一个Ini操作类
      FileName = fileInfo.FullName;
C#一个Ini操作类    }

C#一个Ini操作类    
//写INI文件
{
{
C#一个Ini操作类        
// Todo:抛出自定义的异常
C#一个Ini操作类
        throw(new ApplicationException("写Ini文件出错"));
C#一个Ini操作类      }

C#一个Ini操作类    }

C#一个Ini操作类    
//读取INI文件指定
{
C#一个Ini操作类      Byte[] Buffer
=new Byte[65535];
C#一个Ini操作类      
int bufLen=GetPrivateProfileString(Section,Ident,Default,Buffer, Buffer.GetUpperBound(0),FileName);
C#一个Ini操作类      
//必须设定0(系统默认的代码页)的编码方式,否则无法支持中文
C#一个Ini操作类
      string s=Encoding.GetEncoding(0).GetString(Buffer);
C#一个Ini操作类      s
=s.Substring(0,bufLen);
C#一个Ini操作类      
return s.Trim();
C#一个Ini操作类    }

C#一个Ini操作类
C#一个Ini操作类    
//读整数
{
C#一个Ini操作类      
string intStr=ReadString(Section, Ident, Convert.ToString(Default));
{
C#一个Ini操作类        
return Convert.ToInt32(intStr);
C#一个Ini操作类      }

{
C#一个Ini操作类        Console.WriteLine(ex.Message);
C#一个Ini操作类        
return Default;
C#一个Ini操作类      }

C#一个Ini操作类    }

C#一个Ini操作类
C#一个Ini操作类    
//写整数
{
C#一个Ini操作类      WriteString(Section, Ident, Value.ToString());
C#一个Ini操作类    }

C#一个Ini操作类
C#一个Ini操作类    
//读布尔
{
{
C#一个Ini操作类        
return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default) ));
C#一个Ini操作类      }

{
C#一个Ini操作类        Console.WriteLine(ex.Message);
C#一个Ini操作类        
return Default;
C#一个Ini操作类      }

C#一个Ini操作类    }

C#一个Ini操作类
C#一个Ini操作类    
//写Bool
{
C#一个Ini操作类      WriteString(Section, Ident, Convert.ToString(Value));
C#一个Ini操作类    }

C#一个Ini操作类
C#一个Ini操作类    
//从Ini文件中,将指定的Section名称中的所有Ident添加到列表中
{
C#一个Ini操作类      Byte[] Buffer
=new Byte[16384];
C#一个Ini操作类      
//Idents.Clear();
C#一个Ini操作类

C#一个Ini操作类      
int bufLen=GetPrivateProfileString(Section, nullnull, Buffer, Buffer.GetUpperBound(0),
C#一个Ini操作类        FileName);
C#一个Ini操作类      
//对Section进行解析
C#一个Ini操作类
      GetStringsFromBuffer(Buffer, bufLen, Idents);
C#一个Ini操作类    }

C#一个Ini操作类
{
C#一个Ini操作类      Strings.Clear();
{
C#一个Ini操作类        
int start=0;
{
{
C#一个Ini操作类            String s
=Encoding.GetEncoding(0).GetString(Buffer, start, i-start);
C#一个Ini操作类            Strings.Add(s);
C#一个Ini操作类            start
=i+1;
C#一个Ini操作类          }

C#一个Ini操作类        }

C#一个Ini操作类      }

C#一个Ini操作类    }

C#一个Ini操作类    
//从Ini文件中,读取所有的Sections的名称
{
C#一个Ini操作类      
//Note:必须得用Bytes来实现,StringBuilder只能取到第一个Section
C#一个Ini操作类
      byte[] Buffer = new byte[65535];
C#一个Ini操作类      
int bufLen=0;
C#一个Ini操作类      bufLen 
= GetPrivateProfileString(nullnullnull,Buffer,
C#一个Ini操作类        Buffer.GetUpperBound(
0), FileName);
C#一个Ini操作类      GetStringsFromBuffer(Buffer, bufLen, SectionList);
C#一个Ini操作类    }

C#一个Ini操作类    
//读取指定的Section的所有Value到列表中
{
C#一个Ini操作类      StringCollection KeyList
=new StringCollection();
C#一个Ini操作类      ReadSection(Section, KeyList);
C#一个Ini操作类      Values.Clear();
{
C#一个Ini操作类        Values.Add(key, ReadString(Section, key, 
""));
C#一个Ini操作类      }

C#一个Ini操作类    }

C#一个Ini操作类    
//清除某个Section
{
C#一个Ini操作类      
//
{
C#一个Ini操作类        
throw(new ApplicationException("无法清除Ini文件中的Section"));
C#一个Ini操作类      }

C#一个Ini操作类    }

C#一个Ini操作类    
//删除某个Section下的键
{
C#一个Ini操作类      WritePrivateProfileString(Section, Ident, 
null, FileName);
C#一个Ini操作类    }

C#一个Ini操作类    
//Note:对于Win9X,来说需要实现UpdateFile方法将缓冲中的数据写入文件
C#一个Ini操作类    
//在Win NT, 2000和XP上,都是直接写文件,没有缓冲,所以,无须实现UpdateFile
C#一个Ini操作类    
//执行完对Ini文件的修改之后,应该调用本方法更新缓冲区。
{
C#一个Ini操作类      WritePrivateProfileString(
nullnullnull, FileName);
C#一个Ini操作类    }

C#一个Ini操作类
C#一个Ini操作类    
//检查某个Section下的某个键值是否存在
{
C#一个Ini操作类      
//
C#一个Ini操作类
      StringCollection Idents=new StringCollection();
C#一个Ini操作类      ReadSection(Section, Idents);
C#一个Ini操作类      
return Idents.IndexOf(Ident)>-1;
C#一个Ini操作类    }

C#一个Ini操作类
C#一个Ini操作类    
//确保资源的释放
{
C#一个Ini操作类      UpdateFile();
C#一个Ini操作类    }

C#一个Ini操作类  }

C#一个Ini操作类}

C#一个Ini操作类

相关文章: