如何使用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.
中使用 ConfigurationSection
和 ConfigurationElementCollection
使用 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; }
}
}
其次定义ConfigurationElementCollection
if菜单集合
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();
}
}
}
我有一个名为 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.
中使用ConfigurationSection
和 ConfigurationElementCollection
使用 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; }
}
}
其次定义ConfigurationElementCollection
if菜单集合
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();
}
}
}