[C++] Exportierte Datei kann während der Laufzeit nicht geöffnet werden

FranzSorg

Grünschnabel
Hallo

Ich habe ein Programm geschrieben das .xml Files speichert. So lange das
Programm geöffnet ist, kann ich dieses File nicht öffnen (weil das Programm
noch darauf zugreift?!).

Ich habe alle globalen Zeiger gelöscht oder auf NULL gesetzt.


Was könnte in meinem Progamm falsch sein? Um das XML-File während der
Laufzeit zu öffnen?
 
Zuletzt bearbeitet:
Hallo

Ich habe ein Programm geschrieben das .xml Files speichert. So lange das
Programm geöffnet ist, kann ich dieses File nicht öffnen (weil das Programm
noch darauf zugreift?!).

Ich habe alle globalen Zeiger gelöscht oder auf NULL gesetzt.
Die Zeiger auf NULL zu setzen bringt gar nichts. Du mußt lediglich die Datei ordentlich schliessen.

Ansonsten möchte ich mich cesupa anschliessen: zeig deinen Code.

Gruß
 
Ich benutze um es mir leichter zu machen die XMLAssistant.dll. Letzt endlich macht sie
aber auch nichts anderes als die Knoten und Elemente mit AppendChild, an ein XMLdoc
element anzuhängen. Nun das geht auch alles.

Zum abspeichern rufe ich eine Methode auf die dann folgenden Code abarbeitet:

XmlTextWriter writer = new XmlTextWriter(filePath + fileName + ".xml" ,null);
writer.Formatting = Formatting.Indented;
xmlDoc.Save(writer);

Nun das geht ja auch aber, wenn noch das Programm offen ist hat es noch irgendeine
Semaphore auf die XML-Datei.

Zitat:
> Die Zeiger auf NULL zu setzen bringt gar nichts. Du mußt lediglich die Datei ordentlich
schliessen.

Ja wenn ich das Programm schließe kann ich auch drauf zugreifen. Hab grad getestet,
wenn man die Daten ein zweites Mal speichert unter einen anderen Namen, kann man
die erst geschriebene Datei lesen. Aber die 2 halt nicht.

Also frisch geschriebenes gibt er nicht her... Das muss doch gehn, die großen Programme
bekommen das doch auch hin.

Danke schon mal für eure Hilfbereichtschaft.
Franz
 
Ach tut mir leid mein Fehler hier noch mal der gesamte Quellcode:

public void SaveProject(string path)
{
// Save the document to a file and auto-indent the output.
filePath = path + "\\";
try
{
XmlTextWriter writer = new XmlTextWriter(FilePath + FileName + ".xml" ,null);
writer.Formatting = Formatting.Indented;
xmlDoc.Save(writer);

writer.Close();
}
catch (IOException e)
{
Console.WriteLine("Message: " + e.Message + "\nSource: " + e.Source);
}
}

Das ist der Code aus der dll. Und C# Quellcode.

Also der Writter wird geclosed. Ich denke der Fehler muss wo anders liegen, die werden
das schon richtig gemacht haben. Aber an welcher Selle kann ich denn da suchen?
 
Und es muss doch ein fehler in der dll sein. Ich hab grad noch mal geschaut es gibt 2 Methoden einmal die eben angegebene und einmal:

public void SaveProject()
{
XmlTextWriter writer = new XmlTextWriter(filePath + fileName + ".xml" ,null);
writer.Formatting = Formatting.Indented;
xmlDoc.Save(writer);
}

Aber nur diese kann ich benutzen da er abstürzt wenn er die anderen benutzt. Wegen:
> Das angegebene Pfadformat wird nicht unterstützt.
Aber das stimmt nicht. Habs genauso übergeben wie beim CreateNewProject. Die dll hatte
den Filename aber in der Klasse global. Also gibts da wahrscheinlich Konflikte.

public void CreateNewProject(string newFileType, string newFileName)
{
fileName = String.Copy(newFileName);
xmlDoc.LoadXml("<" + newFileType+" FileName=\""+newFileName+"\"> </" + newFileType+ ">");
}



Das mit dem writter.close() war ein Volltreffer. Kann ich auf die dll extern drauf
zugreifen? Und den writter closen.
 
Zuletzt bearbeitet:
Heureka.

Habs nun selber gelöst. ich hab mir einfach das xmldoc von der dll ausgeben lassen und es dann
per hand gespeichert.

Also wenn das Programm während der Laufzeit das XML dokument nicht frei gibt fehlt
writer.close();

Vielen dank für eure Zeit

Franz
 
Zurück