转,出处忘记了,调API,你看看虽然微软早已经建议在WINDOWS中用注册表代替INI文件,但是在实际应用中,INI文件仍然有用武之地,尤其现在绿色软件的流行,越来越多的程序将自己的一些配置信息保存到了INI文件中。  INI文件是文本文件,由若干节(section)组成,在每个带括号的标题下面,是若干个关键词(key)及其对应的值(Value)  [Section]  Key=ValueVC中提供了API函数进行INI文件的读写操作,但是微软推出的C#编程语言中却没有相应的方法,下面我介绍一个读写INI文件的C#类并利用该类保存窗体的坐标,当程序再次运行的时候,窗体将显示在上次退出时的位置。INIFILE类:using System;using System.IO;using System.Runtime.InteropServices;因为我们需要调用API函数,所以必须创建System.Runtime.InteropServices命名空间以提供可用于访问 .NET 中的 COM 对象和本机 API 的类的集合。using System.Text;namespace Ini{     publicclass IniFile     {         publicstring path;     //INI文件名          [DllImport("kernel32")]          privatestaticexternlong WritePrivateProfileString(string section,string key,string val,string filePath);          [DllImport("kernel32")]          privatestaticexternint GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);         //声明读写INI文件的API函数              public IniFile(string INIPath)         {              path = INIPath;         }         //类的构造函数,传递INI文件名         publicvoid IniWriteValue(string Section,string Key,string Value)         {              WritePrivateProfileString(Section,Key,Value,this.path);         }         //写INI文件                  publicstring IniReadValue(string Section,string Key)         {              StringBuilder temp = new StringBuilder(255);              int i = GetPrivateProfileString(Section,Key,"",temp,255,this.path);              return temp.ToString();         }         //读取INI文件指定     }}
调用INIFILE类:新建一个标准的C# WINDOWS应用程序项目,在窗体中分别增加命名为sect、key、val的三个文本框。增加如下代码:using Ini;    //创建命名空间//当窗体关闭时保存窗体坐标privatevoid Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)         {              IniFile ini = new IniFile("C:\\test.ini");              ini.IniWriteValue("LOC" ,"x" ,this.Location.X.ToString()   );              ini.IniWriteValue("LOC " ,"y" ,this.Location.Y.ToString()   );              //ToString方法将数字转换为字符串         }//当窗体启动时,读取INI文件的值并赋值给窗体          privatevoid Form1_Load(object sender, System.EventArgs e)         {              IniFile ini = new IniFile("C:\\test.ini");              Point     p=new Point() ;              if ((ini.IniReadValue ("LOC" ,"x" )!="" ) && (ini.IniReadValue ("LOC" ,"y" )!=""))              //判断返回值,避免第一次运行时为空出错              {                   p.X=int.Parse (ini.IniReadValue ("LOC" ,"x" ));                   p.Y =int.Parse (ini.IniReadValue ("LOC" ,"y" ));                   // int.Parse将字符串转换为int                   this.Location =p;              }         }

解决方案 »

  1.   

    add a class in your project code exampleusing System;
    using System.Runtime.InteropServices;
    using System.Text;namespace Ini
    {
    /// <summary>
    /// Create a New INI file to store or load data
    /// </summary>
    public class IniFile
    {
    public string path; [DllImport("kernel32")]
    private static extern long WritePrivateProfileString(string section,
    string key,string val,string filePath);
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section,
    string key,string def, StringBuilder retVal,
    int size,string filePath); /// <summary>
    /// INIFile Constructor.
    /// </summary>
    /// <PARAM name="INIPath"></PARAM>
    public IniFile(string INIPath)
    {
    path = INIPath;
    }
    /// <summary>
    /// Write Data to the INI File
    /// </summary>
    /// <PARAM name="Section"></PARAM>
    /// Section name
    /// <PARAM name="Key"></PARAM>
    /// Key Name
    /// <PARAM name="Value"></PARAM>
    /// Value Name
    public void IniWriteValue(string Section,string Key,string Value)
    {
    WritePrivateProfileString(Section,Key,Value,this.path);
    }
            
    /// <summary>
    /// Read Data Value From the Ini File
    /// </summary>
    /// <PARAM name="Section"></PARAM>
    /// <PARAM name="Key"></PARAM>
    /// <PARAM name="Path"></PARAM>
    /// <returns></returns>
    public string IniReadValue(string Section,string Key)
    {
    StringBuilder temp = new StringBuilder(255);
    int i = GetPrivateProfileString(Section,Key,"",temp, 
    255, this.path);
    return temp.ToString(); }
    protected void finalize() 
    {
    }
    }
    }
      

  2.   

    /// <summary>
    /// Ini文件操作的类
    /// </summary>
    public class IniFile
    {
    public string path;     //INI文件名 //声明读写INI文件的API函数    
    [DllImport("kernel32")]
    private static extern long WritePrivateProfileString(string section,string key,string val,string filePath); [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);

    /// <summary>
    /// 类的构造函数
    /// </summary>
    /// <param name="INIPath">INI文件名</param>
    public IniFile(string INIPath)
    {
    path = INIPath;
    } /// <summary>
    /// 写INI文件 
    /// </summary>
    /// <param name="Section">节</param>
    /// <param name="Key">关键字</param>
    /// <param name="Value">值</param>
    public void WriteValue(string Section,string Key,string Value)
    {
    WritePrivateProfileString(Section,Key,Value,this.path);
    }
    /// <summary>
    /// 写INI文件 
    /// </summary>
    /// <param name="Section">节</param>
    /// <param name="Key">关键字</param>
    /// <param name="Value">值</param>
    /// <param name="path">ini文件所以路径</param>
    public static void WriteValue(string Section,string Key,string Value,string path)
    {
    WritePrivateProfileString(Section,Key,Value,path);
    }
    /// <summary>
    /// 读取INI文件指定
    /// </summary>
    /// <param name="Section">节</param>
    /// <param name="Key">关键字</param>
    /// <returns>指定节-关键字的值</returns>
    public string ReadValue(string Section,string Key)
    {
    StringBuilder temp = new StringBuilder(255);
    int i = GetPrivateProfileString(Section,Key,"",temp,255,this.path);
    return temp.ToString();
    } /// <summary>
    /// 读取INI文件指定
    /// </summary>
    /// <param name="Section">节</param>
    /// <param name="Key">关键字</param>
    /// <returns>指定节-关键字的值</returns>
    /// <param name="path">ini文件所在路径</param>
    public string ReadValue(string Section,string Key,string path)
    {
    StringBuilder temp = new StringBuilder(255);
    int i = GetPrivateProfileString(Section,Key,"",temp,255,path);
    return temp.ToString();
    } }