yellowspam
Erfahrenes Mitglied
Hi@all: also ich hab mal wieder ein Problem.
Und zwar habe ich folgenden Source:
Der Code prüft ob das ile vorhanden ist oder nicht, falls nicht schreibt er ein neues File.
Wenn das File schon existiert springt er ans Ende des Textes und geht 12 zeichen zurück um dann den neuen Tag an den vorherigen anzuhängen.
Aber ich krieg dabei immer folgende Meldung:"Unable seek backward to overwrite data that previously existed in a file opened in Append mode. "
Theoretisch sollte der Code richtig sein,da der </Downloads>-tag genau 12 zeichen lang ist und der writer genau 12 zeichen zurückgeht.
Und zwar habe ich folgenden Source:
Code:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Web.Configuration;
using System.Xml;
using System.IO;
using System.Configuration;
namespace bluestep.DownloadManager
{
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;
}
/// <summary>
/// Überprüft ob ein File existiert oder nicht...
/// </summary>
/// <param name="FilePath"></param>
/// <returns>true... if file exists, 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", DateTime.Now.ToString());
//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
}//end namespace
Der Code prüft ob das ile vorhanden ist oder nicht, falls nicht schreibt er ein neues File.
Wenn das File schon existiert springt er ans Ende des Textes und geht 12 zeichen zurück um dann den neuen Tag an den vorherigen anzuhängen.
Aber ich krieg dabei immer folgende Meldung:"Unable seek backward to overwrite data that previously existed in a file opened in Append mode. "
Theoretisch sollte der Code richtig sein,da der </Downloads>-tag genau 12 zeichen lang ist und der writer genau 12 zeichen zurückgeht.