0

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 が適切に破棄されていないように感じます...

ここに画像の説明を入力

4

4 に答える 4