Entwickler-Ecke

IO, XML und Registry - Eigenschaften in INI files speichern


sam07 - Di 27.05.08 09:42
Titel: Eigenschaften in INI files speichern
Hallo,

ich habe ein Form Designer C# und möchte Eigenschaften von Controls und Forms in INI Files speichern..das ganze soll bei zum Beispiel mehrere Textboxes so in INI File gespeichert werden:

[Form1]
'TextBoxdata = Fett;Font;Fettschrift;HintergrundFarbe;Transparent|(nächste TextBoxdata(Fett;Font;....))|...
'TextBoxPos = x-position;y-position;breite;höhe|(nächste TextBoxPos)|...
'TextBoxName = Name;;;1;|Name;;;2;|....

ich werde denkbar wenn jemand da mir helfen kann

danke sam07


Moderiert von user profile iconChristian S.: Topic aus WinForms verschoben am Di 27.05.2008 um 10:21


Christian S. - Di 27.05.08 10:23

Hallo und :welcome:!

Mal abgesehen davon, dass ini-Dateien nicht mehr wirklich Stand der Technik sind: Wo liegt denn nun Dein Problem, wo kommst Du nicht weiter?

Grüße
Christian


sam07 - Di 27.05.08 10:56
Titel: Eigenschaften in INI files speichern C#
also habe ich angefangen mit DLL´s zu importieren,



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
[DllImport("kernel32")]
        private static extern long WritePrivateProfileString(
            string section,
            string key,
            string val,
            string filePath);

        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(
            string section,
            string key,
            string def,
            StringBuilder retVal,
            int size,
            string filePath);


Und mit dieser Funktion ..



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public static string getentryline(string section, string entry, string standard, string file)
        {
            int result;
            int chars = 50000;
            StringBuilder buffer = new StringBuilder(chars);

            result = GetPrivateProfileString(section, entry, standard, buffer, chars, file);

            return buffer.ToString();
        }

und ich weisse nicht wie es weiter gehen soll..

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Kha - Di 27.05.08 11:06

Bevor ich mich mit P/Invoke herumschlagen müsste, würde ich doch wirklich lieber ein von Haus aus unterstütztes Format wie XML benutzen :| . Wenn du sowieso nur einen Objektbaum 1:1 in eine Datei übertragen willst, bist du mit XML quasi schon fertig: F1 -> "XML-Serialisierung".


JüTho - Di 27.05.08 11:07

Bitte entscheide Dich, ob Du die Diskussion hier oder im Entwickler-Forum [http://entwickler-forum.de/showthread.php?t=48545] fortführen willst. Dann werde ich weitere Hinweise geben.

DLLs zu importieren, ist auf jeden Fall kein sinnvoller Weg. Das NET Framework bietet so viele Möglichkeiten, Dateien zu lesen, zu speichern und zu verarbeiten, dass Du diese benutzen solltest. Einige habe ich Dir im Entwickler-Forum genannt.

Jürgen


sam07 - Di 27.05.08 11:24
Titel: Eigenschaften in INI files speichern
ja ich weisse mit "XML Serialisierung" ist einfacher, das habe ich schon realisiert, aber mein Chef will unbedingt, dass ich die Datenspeicherung mit diesen blöden Ini Files realisiere...


Christian S. - Di 27.05.08 11:28

Okay, muss man akzeptieren.

Und nun hast Du Quellcode, zum lesen und schreiben von Werten in Ini-Dateien. Wo ist jetzt der Punkt, wo Du nicht weiter kommst? :-)


sam07 - Di 27.05.08 12:07
Titel: Eigenschaften in INI files speichern
der Punkt ist, dass ich nicht weisse wie ich die ganze Properties von mehrere Controls der selber Art in einer Linie mit '|' und ';' realisiere.


JüTho - Di 27.05.08 12:37

Will Dein Chef wirklich auch, dass die gleiche Art von Eigenschaften zusammengefasst werden soll? Kannst Du ihn nicht wenigstens dazu bewegen, dass in einer Zeile genau ein Control steht?

Benutze, wie schon gesagt, String.Format und String.Split.
Meine Empfehlung:

Quelltext
1:
2:
//  Name = Typ; Left; Top; Width; Height usw.
Nachname_Textbox=TextBox;100;50;200;24

So zusammensetzen:

C#-Quelltext
1:
2:
3:
4:
TextBox box = Nachname_Textbox;
string singleTerm = String.Format("{0}={1};{2};{3};{4};{5}",
    box.Name, box.GetType().Name,
    box.Left, box.Top, box.Width, box.Height);

So aufteilen:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
string singleTerm = ...
int i0 = singleTerm.IndexOf('=');
string name = singleTerm.Substring(0,i0);
string[] terms = singleTerm.Substring(i0+1).Split(';');
TextBox box = new TextBox();
box.Name = name;
box.Left = int.Parse(terms[1]);

Wenn Dein Chef sich dazu nicht bewegen lässt, kannst Du in gleicher Weise die von mir vorgeschlagenen Methoden benutzen. Du musst dann die einzelnen Abschnitte zusätzlich zusammenfügen. Schau Dir dazu auch - wie ebenfalls schon vorgeschlagen - String.Join und StringBuilder an.

Jürgen

PS. Merkst Du, dass Fragen in mehreren Foren unfreundlich sind? Hast Du gelesen, dass ich im Entwickler-Forum schon passende Antworten gegeben habe?


sam07 - Di 27.05.08 13:53
Titel: Eigenschaften in INI files speichern
erst mal danke schön für deine Hilfe und Bemühungen..und entschuldigung ich habe nicht gewusst das ist mit Fragen in mehreren Foren unfreundlich ist..also ich bin neu im Bereich C#..und war blockiert.
also wie ich das verstanden habe werde ich dieses DlL´s und diese Funktion mit getentryline nicht brauchen oder..