如何使用c#访问和修改ini格式的.config文件的值?

How to access and modify the values of .config file with ini format by using c#?

我有一个名为 menu.config 的 ini 格式的 .config 文件。我在 Visual Studio 2010 年创建了一个 C# Web 表单应用程序,我想 access/modify 这个文件的值。例如,在 [Menu 1] 上将 Enable=1 编辑为 Enable=2。我不知道如何开始。希望有人能给我一些建议,谢谢!

[Menu1]
Enabled=1
Description=Fax Menu 1

[Menu2]
Enabled=1
description=Forms

我建议您将值存储在 Web.config 文件中并在所有应用程序中检索它们。你需要将它们存储在应用程序设置中

<appSettings>
  <add key="customsetting1" value="Some text here"/>
</appSettings>

并将它们检索为:

string userName = WebConfigurationManager.AppSettings["customsetting1"]

如果你想从特定文件中读取。

使用Server.Mappath设置路径。 下面是代码。

using System;
using System.IO;

class Test
{
    public void Read()
    {
        try
        {
            using (StreamReader sr = new StreamReader("yourFile"))
            {
                String line = sr.ReadToEnd();
                Console.WriteLine(line);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The file could not be read:");
            Console.WriteLine(e.Message);
        }
    }
}

为了实现采集配置。您可以在 web.config.

中使用 ConfigurationSectionConfigurationElementCollection

使用 ConfigurationSection 的一个优点是您可以将菜单配置的物理文件与 web.config 配置的其余部分分开。在主机环境中发布应用程序时,这是非常困难的。 (参见 this

首先您需要创建菜单配置class

public class MenuConfig : ConfigurationElement
  {
    public MenuConfig () {}

    public MenuConfig (bool enabled, string description)
    {
      Enabled = enabled;
      Description = description;
    }

    [ConfigurationProperty("Enabled", DefaultValue = false, IsRequired = true, IsKey = 

true)]
    public bool Enabled
    {
      get { return (bool) this["Enabled"]; }
      set { this["Enabled"] = value; }
    }

    [ConfigurationProperty("Description", DefaultValue = "no desc", IsRequired = true, 

IsKey = false)]
    public string Description
    {
      get { return (string) this["Description"]; }
      set { this["Description"] = value; }
    }
  }

其次定义ConfigurationElementCollectionif菜单集合

public class MenuCollection : ConfigurationElementCollection
  {
    public MenuCollection()
    {
      Console.WriteLineMenuCollection Constructor");
    }

    public MenuConfig this[int index]
    {
      get { return (MenuConfig)BaseGet(index); }
      set
      {
        if (BaseGet(index) != null)
        {
          BaseRemoveAt(index);
        }
        BaseAdd(index, value);
      }
    }

    public void Add(MenuConfig menuConfig)
    {
      BaseAdd(menuConfig);
    }

    public void Clear()
    {
      BaseClear();
    }

    protected override ConfigurationElement CreateNewElement()
    {
      return new MenuConfig();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
      return ((MenuConfig) element).Port;
    }

    public void Remove(MenuConfig menuConfig)
    {
      BaseRemove(menuConfig.Port);
    }

    public void RemoveAt(int index)
    {
      BaseRemoveAt(index);
    }

    public void Remove(string name)
    {
      BaseRemove(name);
    }
  }

第三个 创建高级别 ConfigurationSection 这是自定义配置的入口点

public class MenusConfigurationSection : ConfigurationSection
{
   [ConfigurationProperty("Menus", IsDefaultCollection = false)]
   [ConfigurationCollection(typeof(MenuCollection),
       AddItemName = "add",
       ClearItemsName = "clear",
       RemoveItemName = "remove")]
   public MenuCollection Menus
   {
      get
      {
         return (MenuCollection)base["Menus"];
      }
   }
}

使用web.config

中的部分
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <configSections>
      <section name="MenusSection" type="{namespace}.MenusConfigurationSection, {assembly}"/>
   </configSections>
   <MenusSection>
      <Menus>
         <add Enabled="true" Description="Desc 1" />
         <add Enabled="true" Description="Desc 1" />
      </Menus>
   </ServicesSection>
</configuration>

此代码项目提供了一个非常直接的示例,说明如何读取 ini 文件。然而,正如其他示例中所述,您确实应该使用 .net app.config 系统。

http://www.codeproject.com/Articles/1966/An-INI-file-handling-class-using-C

using 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();

        }
    }
}