XML ファイルを正常に作成していますが、ユーザーが以前のバージョンを上書きしようとして新しい XML を作成しようとすると、代わりにデータが追加されます。上書きしないでください。
これを理解するのに苦労しているのは、XMLファイルを作成する前にファイルが存在するかどうかを最初に確認し、存在する場合は削除してから新しいXMLファイルを作成することです。デバッガーでコードを実行し、ファイルが保存されているディレクトリを調べたところ、ファイルが作成され、削除され、再作成されていることがはっきりとわかります。
// Create new KML file
string filepath = STK_TEMP + "/" + stkObjectClass + "-" + stkObjectName + ".kml";
if(File.Exists(filepath))
File.Delete(filepath);
StreamWriter xmlsteam = new StreamWriter(filepath);
using (XmlTextWriter xmlWriter = new XmlTextWriter(xmlsteam))
{
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.Indentation = 2;
// Open KML file for appending data
xmlWriter.WriteStartDocument();
// Write KML
xmlWriter.WriteStartElement("kml", "http://earth.google.com/kml/2.1");
xmlWriter.WriteStartElement("Document");
xmlWriter.WriteStartElement("name");
xmlWriter.WriteString(stkObjectName);
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("Placemark");
// Append data from LLA / KML position report
xmlWriter.WriteStartElement("LineString");
xmlWriter.WriteStartElement("altitudeMode");
xmlWriter.WriteString("absolute");
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("coordinates");
xmlWriter.WriteString(kmlCoordinateString);
xmlWriter.WriteEndElement(); // END Coordinates
xmlWriter.WriteEndElement(); // END Point
xmlWriter.WriteEndElement(); // END Placemark
bool isFirstPoint = true;
double seconds = 0;
// Create individual poitns for Google Earth playback
foreach (string kmlPoint in kmlCoordinateList)
{
xmlWriter.WriteStartElement("Placemark");
xmlWriter.WriteStartElement("Style");
xmlWriter.WriteStartElement("IconStyle");
xmlWriter.WriteStartElement("Icon");
xmlWriter.WriteStartElement("href");
xmlWriter.WriteString("http://maps.google.com/mapfiles/kml/paddle/wht-blank.png");
xmlWriter.WriteEndElement(); // END href
xmlWriter.WriteEndElement(); // END Icon
xmlWriter.WriteEndElement(); // END IconStyle
xmlWriter.WriteEndElement(); // END Style
xmlWriter.WriteStartElement("TimeStamp");
xmlWriter.WriteStartElement("when");
xmlWriter.WriteString(DateTime.Now.AddSeconds(seconds).ToString("yyyy-MM-ddTHH:mm:ssZ"));
xmlWriter.WriteEndElement(); // END when
xmlWriter.WriteEndElement(); // END TimeStamp
xmlWriter.WriteStartElement("Point");
xmlWriter.WriteStartElement("altitudeMode");
xmlWriter.WriteString("absolute");
xmlWriter.WriteEndElement(); // END altitudeMode
xmlWriter.WriteStartElement("coordinates");
xmlWriter.WriteString(kmlPoint);
xmlWriter.WriteEndElement(); // END coordinates
xmlWriter.WriteEndElement(); // END Point
xmlWriter.WriteEndElement(); // END Placemark
seconds++;
}
xmlWriter.WriteEndElement(); // END KML
// END KML file and close
xmlWriter.WriteEndDocument();
xmlWriter.Flush();
xmlWriter.Close();
}
xmlsteam.Dispose();
アプリケーションを閉じて起動し、ファイルを作成しようとすると、最初の試行で上書きされます。アプリケーションを開いたままにして、同じファイル パスで新しいファイルを作成しようとすると、データが追加されるだけです。
何かご意見は?
XmlTextWriter が適切に破棄されていないように感じます...