Hallo, Problem: Ich möchte in ein ConfigFile ein paar Parameter schreiben. Diese Parameter liegen bereits in Variablen vor, deren Wert und deren Name (wegen der späteren Zuordnung bei Wiedereinlesen) praktisch nur noch in die Datei geschrieben werden muss. C#2005. Beispielcode: [...] Parameter Zeit; <-- die Variable Zeit ist vom Datentyp Parameter Parameter Zeit2; List <Parameter> ParameterListe = new List<Parameter>(); ParameterListe.Add(Zeit); ParameterListe.Add(Zeit2); Zeit = LiesEin(); <-- Benutzer gibt z.B. 100 ein Zeit2 = LiesEin(); SichereKonfiguration(); <-- diese Funktion will ich schreiben In der ConfigDatei soll das dann so aussehen: [Beginn der Datei] Zeit=100 Zeit2=150 [Ende der Datei] So funktionierts NICHT (liefert nicht den Variablennamen, sondern den String "Projekt.Parameter"): void SichereKonfiguration() { [Datei öffnen usw.] foreach (Parameter pm in ParameterListe) { ConfigFile.WriteLine(pm.ToString()); <-- was muss hier hin? } } Wie muss die Funktion "SichereKonfiguration" aussehen, wenn ich den Variablennamen (hier: Zeit und Zeit2) NICHT kenne(n will)! Hintergrund: - Es treten viele Variablen/Parameter auf, die gesichert werden sollen und gelegentlich kommen neue Variablen im Code hinzu. Ich will die Funktion "SichereKonfiguration" nicht jedesmal anpassen müssen. Habe ich wichtige Infos vergessen? Danke, Richard.
hm... also direkt auf den namen zuzugreifen ist wohl etwas schwer, aber mach dir doch ein array, in dem du die namen, die vergeben werden einfach speicherst (weiss ja nicht wie viele parameternamen da vorkommen sollen, aber wenns nich allzuviele sind - wegen speicherbedarf - kannst du das ja so machen)... oder hab ich was falsch verstanden? g
Naja, damit verlagere ich das Problem ja nur, oder? Ich möchte ja nicht,
dass ich die Variablennamen an zwei unterschiedlichen Stellen eingeben
und konsistent halten muss.
> direkt auf den namen zuzugreifen ist wohl etwas schwer
Schwer oder unmöglich oder gar unsinnig?
Macht man das überhaupt so wie ich das jetzt angefangen habe?
Ich muss die Werte der Parameter eigentlich nur irgendwo fest ablegen
und beim nächsten Programmstart wieder einlesen können. Wie ist da das
Standardvorgehen?
Hi erstell dir eine Klasse die deine ganzen Konfig-Infos hält und serialisier das Teil in eine XML-Datei. Die kannst du dann beim nächsten Starten wieder in ein Konfigobjekt "wandeln". Wenn natürlich Parameter dazukommen und das ganze rückwärtkompatibel bleiben soll wirds schwieriger. Matthias
Standardvorgehen: Wenn es tatsächlich Anwendungseinstellungen sind, dann kann man dies in den Projekteinstellungen machen (Projekt->Eigenschaften->Einstellungen). Sowohl für globale, als auch für Benutzereinstellungen. Der Zugriff im Programm erfolgt dann z.B. über Settings.Default.Zeit2. Gespeichert werden diese mit Settings.Default.Save() Der anderer übliche Weg ist, wie schon gesagt, z.B. über XmlSerializer Codeausschnitt z.B. hier: Beitrag "serialisieren eines Array von Klassen" Per Reflection geht es zwar auch...
1 | Type t = typeof(aType); |
2 | // alle "Felder" einer Instanz auflisten
|
3 | System.Reflection.FieldInfo[] fi = |
4 | t.GetFields(System.Reflection.BindingFlags.Instance | |
5 | System.Reflection.BindingFlags.Static | |
6 | System.Reflection.BindingFlags.NonPublic | |
7 | System.Reflection.BindingFlags.Public); |
8 | foreach (System.Reflection.FieldInfo f in fi) { |
9 | string str = f.Name + " = " + f.GetValue(this).ToString(); |
10 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.