Avatar billede west85 Nybegynder
29. oktober 2009 - 14:27 Der er 3 kommentarer

Settingsfil indlæsning

Jeg har en fælles settingsfil som flere brugere skal hente information fra. Den vil være placeret på et fælles drev.
Hver bruger har så også en lokal settingsfil, hvori der skal stå den sti til den fælles settingsfil som er nødvendig.
NU er problemet blot at jeg jo gerne vil lave et objekt til det og indlæse den som fil/objekt så jeg kan tilgå den som normal settingsgfil (den fælles).
Men da den ikke vil være direkte en del af mit projekt og projektmappe så det jo nok her det begynder at skulle indlæses og sådan.

Jeg ved godt jeg bare kan læse værdierne igennem, men var jo lidt mere smart og lækkert hvis jeg kunne få den til at opføre sig som en normal settingsfil som den jo vil være.
Avatar billede bvli Praktikant
30. oktober 2009 - 12:08 #1
Der er flere måder at gribe det an på.

Den helt simple ville være, at du laver en Settings-klasse for de "delte" settings. Og bruger den indbyggede til de personlige settings.

Den delte settings-klasse kunne ligne noget a'la:

[...]
[Serializable]
public class SharedSettings {
  public string SomeSetting {get;set;}
  public string SomeOtherSetting {get;set;}

  public static SharedSettings ReadSettings(string fileName) {
    if (fileName == null) {throw new ArgumentNullException("fileName");}
    if (!File.Exists(fileName)) {
      throw new FileNotFoundException("Settings file not found", fileName));
    }
    using (Stream s = File.OpenRead(fileName)) {
      return (SharedSettings) new XmlSerializer(typeof(SharedSettings)).Deserialize(s);
    }
  }
 
  public static void Save(string fileName, SharedSettings settings) {
    if (fileName == null) {throw new ArgumentNullException("fileName");}
    if (settings == null) {throw new ArgumentNullException("settings");}
    XmlSerializer serializer = new XmlSerializer(typeof(SharedSettings));
    using (Stream s = File.OpenWrite(fileName)) {
      s.SetLength(0);
      serializer.Serialize(s, settings);
    }
  }
}
[...]

Når du så skal tilgå dine settings i dit program kan du gøre det nogenlunde så'n her:

[...]
string settingsFileName = Properties.Settings.Current.SettingsFileName;

SharedSettings settings = File.Exists(settingsFileName) ? SharedSeetings.ReadSettings(settingsFileName) : new SharedSettings();
[...]

Du kan så selv senere begynde at lege med DefaultValueAttributter osv. Men det her virke nok nogenlunde til en start..
Avatar billede west85 Nybegynder
31. oktober 2009 - 19:55 #2
Ville netop gerne undgå at lave min egen settingsfil for det ku jeg nemt ha gjort, men ville bare gerne kunne løse det med indlæsning af en settingsfil, og få dens fordele. Den kan jo sagtens være lavet allerede i projektet og blive kopieret ud, så den kender hvilke settings den har så synes da stadig man burde kunne ordne det.
Avatar billede bvli Praktikant
01. november 2009 - 08:51 #3
Det vil jeg nu også mene, at ovenstående løser? Ellers har jeg nok svært ved at forstå spørgsmålet.

Anyway - den lidt mere langhårede metode er, at du selv implementerer en settingsprovider. Du kan evt. læse mere her:

http://msdn.microsoft.com/en-us/library/8eyb2ct1.aspx
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester