2017-06-16 6 views
0

J'ai stocké mes paramètres d'application dans le fichier de configuration en utilisant ConfigurationManager Class, mon fichier de configuration est dans un chemin personnalisé, maintenant je veux lire mon fichier de configuration mais mon code ne fonctionne pas. Comment devrais-je changer mon code?Lire le fichier de configuration en utilisant AppSetting

Stockage fichier de configuration (fonctionne parfaitement):

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"); 
    } 
} 

lecture du fichier de configuration (ne fonctionne pas, ne fonctionne que si mon magasin de fichier de configuration est le chemin par défaut):

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

- Pouvez-vous nous dire ce qui ne fonctionne pas? Que fait-il ou ne fait-il pas? –

+0

J'essaie de lire mon fichier de configuration à partir du chemin (Application.StartupPath + "\\ ss.ini") –

+0

mais mon ReadSetting func Lire le fichier de configuration du chemin par défaut (application.exe.config) –

Répondre

1

En tant que conversion, app.config Le fichier est toujours stocké sur le chemin de l'application avec le nom application_name.config.

Si vous souhaitez stocker vos configurations sur un chemin personnalisé, envisagez d'utiliser un fichier XML distinct en ignorant le fichier app.config. Ce qui suit est l'exemple de code:

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"; 
    } 
} 

Après est l'utilisation: "mon code écrit fonctionne pas comment dois-je changer mes codes"

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