2017-06-16 152 views
0

我已经使用ConfigurationManager类将配置文件存储在配置文件中,我的配置文件位于自定义路径中,现在我想读取我的配置文件,但是我的代码不工作。我应该如何更改我的代码?使用AppSetting读取配置文件

存储配置文件(运行完美):

static void AddUpdateAppSettings2(string key, string value) 
{ 
    try 
    { 
     string _path = Application.StartupPath + "\\ss.ini"; 
     ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap() 
     { 
      ExeConfigFilename = _path 
     }; 
     Configuration configFile = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None); 
     var settings = configFile.AppSettings.Settings; 
     if (settings[key] == null) 
     { 
      settings.Add(key, value); 
     } 
     else 
     { 
      settings[key].Value = value; 
     } 
     configFile.Save(ConfigurationSaveMode.Modified); 
     ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name); 
    } 
    catch (ConfigurationErrorsException) 
    { 
     Console.WriteLine("Error writing app settings"); 
    } 
} 

读取配置文件(不工作,如果我的配置文件存储的默认路径只适用):

static void ReadSetting(string key) 
{ 
    try 
    { 
     var appSettings =ConfigurationManager.AppSettings; 
     string result = appSettings[key] ?? "Not Found"; 
     Console.WriteLine(result); 
    } 
    catch (ConfigurationErrorsException) 
    { 
     Console.WriteLine("Error reading app settings"); 
    } 
} 
+0

- 你能告诉我们什么不起作用吗?它做什么或不做什么? –

+0

我尝试从路径(Application.StartupPath +“\\ ss.ini”) –

+0

读取我的配置文件,但我的ReadSetting func从默认路径(application.exe.config)读取配置文件 –

回答

1

作为一个转换,app.config文件始终以application_name.config名称存储在应用程序路径中。

如果您想将自己的配置存储在自定义路径中,请考虑使用单独的XML文件绕过app.config文件。以下是示例代码:

internal sealed class AppSettingsSerializer 
{ 
    private AppSettingsSerializer() { } 

    static int BufferSize { get { return 4096; } } 

    internal static AppSettings GetAppSettings(string filePath) 
    { 
     if(File.Exists(filePath) == false) 
      return new AppSettings(); 

     XmlSerializer xmlSerializer = new XmlSerializer(typeof(AppSettings)); 
     using(FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None, BufferSize, FileOptions.SequentialScan)) 
     { 
      XmlReader xmlReader = XmlReader.Create(fileStream); 
      return (AppSettings)xmlSerializer.Deserialize(xmlReader); 
     } 
    } 

    internal static void SetAppSettings(string filePath, AppSettings appSettings) 
    { 
     XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces(); 
     xmlSerializerNamespaces.Add("", ""); 

     XmlSerializer xmlSerializer = new XmlSerializer(typeof(AppSettings)); 
     using(FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, BufferSize, FileOptions.WriteThrough)) 
     { 
      XmlWriterSettings xmlWriterSettings = new XmlWriterSettings(); 
      xmlWriterSettings.Indent = true; 
      xmlWriterSettings.NewLineOnAttributes = true; 

      XmlWriter xmlWriter = XmlWriter.Create(fileStream, xmlWriterSettings); 
      xmlSerializer.Serialize(xmlWriter, appSettings, xmlSerializerNamespaces); 
     } 
    } 
} 

public sealed class AppSettings 
{ 
    public bool Setting1 { get; set; } 
    public string Setting2 { get; set; } 

    public AppSettings() 
    { 
     Setting1 = false; 
     Setting2 = "localhost"; 
    } 
} 

以下是用法:“我编写的代码无法正常工作必须如何我改变我的代码”

AppSettings appSettings = appSettings = AppSettingsSerializer.GetAppSettings(appSettingsFilePath); 
AppSettingsSerializer.SetAppSettings(appSettingsFilePath, appSettings); 
0
web.config 

<configuration> 
    <appSettings> 
<add key="ConnectionString" value="your connectionstring"/> 
    </appSettings> 
</configuration> 

.cs file 

string connectionstring= ConfigurationManager.AppSettings["your connectionstring name is called in web.config"].ToString();