3

次のコードを検討してください。

public class Obj : IObj
{
    public string Prop1{get;set;}
    public string Prop2{get;set;}
    public string Prop3{get;set;}
}

public static void Persist(IObj obj, string fileFullName)
{
    try
    {
        Directory.CreateDirectory(Path.GetDirectoryName(fileFullName));

        var xmlSerializer = new XmlSerializer(obj.GetType());

        using (var fileStream = File.Open(fileFullName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
        {
            xmlSerializer.Serialize(fileStream, obj);
            fileStream.Close();
        }
    }
    catch (Exception e)
    {
       //log
    }
}

初めて' Obj ' で ' Persist ' を呼び出すと、次のような有効な xml ファイルがディスク上に取得されます。

<?xml version="1.0"?>
<Obj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Prop1>value1</Prop1>
    <Prop2>value2</Prop2>
    <Prop2>value3</Prop3>
</Obj>

しかし、 ' Obj ' で ' Persist ' が 2 回目に呼び出されると(たとえば、 ' value1 ' を ' value 'に変更した後)、余分な'>'記号がファイルの最後に追加され、無効になります。 .

<?xml version="1.0"?>
<Obj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Prop1>value</Prop1>
    <Prop2>value2</Prop2>
    <Prop2>value3</Prop3>
</Obj>>

デバッグしてみましたが異常は見られなかったので、ファイルの開き方が関係しているのではないかと推測しています。それを説明する助けがあれば幸いです。

4

2 に答える 2