2017-06-16 69 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();