yellowspam
Erfahrenes Mitglied
Hi@all:
Ich habe ein Problem: Meine applikation schreibt ein XML-file, nun das funktioniert eh tadellos, aber wenn ich dann eine neue node hinzufügen will, dann kommt folgende Fehlermeldung:
"Unable seek backward to overwrite data that previously existed in a file opened in Append mode."
Dabei müßte der Code stimmen, denn filemode.append bedeutet ja dass der nachkommende Text angehängt wird.
Hier mal der Source:
Wo liegt der (Denk)Fehler?
Ich habe ein Problem: Meine applikation schreibt ein XML-file, nun das funktioniert eh tadellos, aber wenn ich dann eine neue node hinzufügen will, dann kommt folgende Fehlermeldung:
"Unable seek backward to overwrite data that previously existed in a file opened in Append mode."
Dabei müßte der Code stimmen, denn filemode.append bedeutet ja dass der nachkommende Text angehängt wird.
Hier mal der Source:
Code:
public partial class test : System.Web.UI.Page
{
// MapPath baut den relativen Pfad in einen absoluten (D:\...) um
private string FilePath = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["XMLFilePath"].ToString());
protected void btntest(Object Sender, EventArgs e)
{
string StatusCode = WriteXML(FilePath);
this.lbl_result.Text = StatusCode;
}
protected void lnkTest(Object Sender, EventArgs e)
{
string StatusCode = WriteXML(FilePath);
this.lbl_result.Text = StatusCode;
}
/// <summary>
/// Überprüft ob ein File existiert oder nicht...
/// </summary>
/// <param name="FilePath"></param>
/// <returns>true... if file existiert, false ... if file is not existing</returns>
private bool IsFileExisting(string FilePath)
{
// variable
bool IsExisting = false;
try
{
// üperprüfen ob das xml file existiert
IsExisting = File.Exists(FilePath);
}
catch
{
// falls in der überprüfung ein Fehler auftritt, gehen wir davon aus
// dass das File nicht existiert.
IsExisting = false;
}
return IsExisting;
}
/// <summary>
///
/// </summary>
/// <param name="FilePath"></param>
/// <returns>Gibt einen Statuscode retour</returns>
private string WriteXML(string FilePath)
{
try
{
// wir überprüfen ob das file existiert
bool IsExisting = IsFileExisting(FilePath);
FileMode fileMode = FileMode.OpenOrCreate;
// wenn die datei existiert, setzen wir den modus zu append
if (IsExisting == true)
fileMode = FileMode.Append;
Stream pfad = new FileStream(FilePath, fileMode);
//erstellt einen neuen XMLWriter
XmlTextWriter objWriter = new XmlTextWriter(pfad, System.Text.Encoding.Default);
//erzwingen von Syntaxeinrückungen
objWriter.Formatting = Formatting.Indented;
// wenn die datei existiert, springen wir an das ende des dokumentes
// und gehen 12 Zeichen zurück.
if (IsExisting == true)
pfad.Seek(-12, SeekOrigin.End);
// wenn das file nicht existiert schreiben wir die
// eröffnungs-node extra ins dokument
if (IsExisting == false)
{
//beginnt das file zu schreiben
objWriter.WriteStartDocument(false);
objWriter.WriteStartElement("Downloads");
}
objWriter.WriteStartElement("Download");
//schreiben des namens des Dls
objWriter.WriteElementString("name", txt_dlname.Text);
//schreiben der URl
objWriter.WriteElementString("url", txt_url.Text);
//schreiben der Uhrzeit der eintragung
objWriter.WriteElementString("CreationTime", txt_dltime.Text);
//schreiben einer Beschreibung des Downloads
objWriter.WriteElementString("Description", txt_content.Text);
objWriter.WriteEndElement();
// wenn das file nciht existiert, schreiben wir die
// end-node extra ins dokument..
if (IsExisting == false)
{
objWriter.WriteEndElement();
//schließen des Dokumentes
objWriter.WriteEndDocument();
}
//Datenstrom in XMLfile schreiben
objWriter.Flush();
//speicher freigeben
objWriter.Close();
return "alles hat geklappt";
}
catch (Exception ex)
{
return ex.Message;
}
}
}//end class
Wo liegt der (Denk)Fehler?