Entwickler-Ecke
IO, XML und Registry - xml Datei speichern
Waterman83 - Do 16.04.09 12:02
Titel: xml Datei speichern
HI C# fans,
ich bin noch ziemlich neu und habe mich schon durchgekämpft wie ich eine xml Datei abspeichern kann:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| private void xmlspeichern() { xmlWriter = new XmlTextWriter("Veranstaltung.xml", Encoding.UTF8); xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement("veranstaltung"); xmlWriter.WriteStartElement("einstellungen"); xmlWriter.WriteStartElement("name"); xmlWriter.WriteRaw(frmVeranstaltungseinstellungen.xmlVeranstaltung.Name); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); if (t != null) { for (int i = 0; i < t.XmlTeilnehmerliste.Count - 1; i++) { xmlWriter.WriteStartElement("teilnehmer"); xmlWriter.WriteStartElement("name"); xmlWriter.WriteRaw(((XmlTeilnehmer)t.XmlTeilnehmerliste[i]).Nachname); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("vorname"); xmlWriter.WriteRaw(((XmlTeilnehmer)t.XmlTeilnehmerliste[i]).Vorname); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); } } xmlWriter.WriteEndDocument(); xmlWriter.Close(); } |
ebenfalls, habe ich mir den BEgriff savefiledialog angeschaut:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| SaveFileDialog dlgFileSave = new SaveFileDialog(); dlgFileSave.Title = "Speichern der Veranstaltung unter"; dlgFileSave.Filter = "xmlDatei (*.xml)|*.xml"; dlgFileSave.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal); dlgFileSave.AddExtension = true; dlgFileSave.DefaultExt = "xml"; dlgFileSave.OverwritePrompt = true; dlgFileSave.ShowDialog(); |
Meine Frage ist nun, wie kann ich beim klicken des Speicher Buttuns das Spiechern ausführen lassen. Auch habe ich gesehen, das man kontrollieren lassen kann ob die Datei schon existiert und es wird gefragt ob sie überschrieben werden soll.
Ich Danke schon einmal
GRuß
Daniel
Moderiert von
Christian S.: C#-Tags hinzugefügt
danielf - Do 16.04.09 13:05
Hallo,
was hast du genau vor? So wie es aussieht willst du eine Teilnehmerliste als xml abspeichern. Du kannst das Ganze einfacher haben, indem du nur die Klassen definierst (Teilnehmer, Teilnehmerliste,...) und diese dann über einen XMLSerializer serialisiert (abspeicherst).
Zum Beispiel:
http://www.devhood.com/Tutorials/tutorial_details.aspx?tutorial_id=236
http://support.microsoft.com/kb/815813
und viele mehr :) Bei konkrenten Fragen oder falls du es wirklich manuel erstellen willst kannst du dich ja nochmal melden.
Gruß Daniel
Waterman83 - Do 16.04.09 13:15
Hi,
leider kann ich nicht viel damit anfangen, da ich den code nicht wirklich verstehe, der sich hinter den links verbirgt, aber wie ich es gesehen habe geht es dabei nur um die erstellung einer xml dtaei, meine Frage ist nur, wie ich das durch den code vom savedialogfenster speichern kann.
Gruß und Dank
Daniel
bakachan - Do 16.04.09 13:20
1. Setze deinen Code bitte in entsprechende Code-Tags
2.
C#-Quelltext
1: 2: 3: 4:
| if (dlgFileSave.ShowDialog() == System.Windows.Forms.DialogResult.OK) { } |
3. zum überprüfen ob eine File schon existiert hat der SaveFileDialog eine CheckFileExists Propertie
danielf - Do 16.04.09 13:36
Zuerst definierst du eine Klasse mit deinen Daten.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| public class Participant { public string GivenName { get; set; } public string SurName { get; set; }
public Participant() { this.GivenName = string.Empty; this.SurName = string.Empty; }
public Participant(string givenName, string surName) { this.GivenName = givenName; this.SurName = surName; } } |
Den parameterlosen Konstruktur wird für die Serialisierung benötigt.
In deiner Hauptklasse hast du dann zum Beispiel eine Liste von Teilnehmer
C#-Quelltext
1:
| private List<Participant> Participants = new List<Participant>(); |
die du dann mit Teilnehmer füllen kannst....
C#-Quelltext
1: 2:
| this.Participants.Add(new Participant("Max", "Mustermann")); this.Participants.Add(new Participant("Sarah", "Musterfrau")); |
Die saveFileDialog Komponente ist nur eine Komponente um einen Dateinamen von dem Benutzer zu beokmmen. Den Dateinamne kann man dann für das Speichern von Dateien verwenden.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if (this.saveFileDialog1.ShowDialog() == DialogResult.OK) { XmlSerializer serializer = new XmlSerializer(typeof(List<Participant>)); using (FileStream stream = File.OpenWrite(this.saveFileDialog1.FileName)) { serializer.Serialize(stream, this.Participants); } } |
und dann hast du deine XML-Datei...
Gruß
Daniel
Waterman83 - Do 16.04.09 13:48
Hi und danke erst einmal für die schnellen antworten. Leider ist das Problem noch nicht gelöst, habe folgendes gemacht:
if (dlgFileSave.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Hier habe ich nun xmlspeichern(); eingeführt
}
es wird eine verknüpfung erstellt, aber die Datei mit einem anderen namen an einer anderen stelle abgespeichert. Ich bin vielleicht nur zu dumm, aber würde mich nocheinmal um einen Tipp freuen.
Wie geht das mit den Tags?
Gruß und Dank
Daniel
danielf - Do 16.04.09 14:08
Weil du deinen Dateinamen in die du das XML schreibst ja auch fest in den Code schreibst!
Erweitere deine xmlspeichern-Methode um den filename als Parameter
C#-Quelltext
1: 2: 3: 4: 5:
| private void xmlspeichern(string dateiName) { xmlWriter = new XmlTextWriter(dateiName, Encoding.UTF8); .... } |
Der Aufruf ist dann
C#-Quelltext
1: 2: 3: 4:
| if (dlgFileSave.ShowDialog() == System.Windows.Forms.DialogResult.OK) { xmlspeichern(dlgFileSave.FileName); } |
Die Code-Formatierung im Forum machst du mit [tag] Code [/tag]. Bei C-Sharp-Code ist der tag cs.
bakachan - Do 16.04.09 14:11
Die Code-Tags findest du wenn du beim Schreiben deines Beitrags oben auf "Bereiche" klickst.
du musst deiner xmlspeichern-Funktion ja auch noch übergeben wohin es speichern soll
Im moment macht die Funktion ja immer das gleiche:
C#-Quelltext
1: 2: 3: 4:
| private void xmlspeichern() { xmlWriter = new XmlTextWriter("Veranstaltung.xml", Encoding.UTF8); |
)
Also:
C#-Quelltext
1: 2: 3: 4: 5:
| if (dlgFileSave.ShowDialog() == System.Windows.Forms.DialogResult.OK) { } |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!