FileMode.Open 和 FileMode.OpenOrCreate 文件存在时的区别?错误?

Rob*_*cki 4 c# xml serialization xml-serialization xmlserializer

我写了这样的代码:

public void Save()
{
    using (FileStream fs = new FileStream(Properties.Settings.Default.settings_file_path, FileMode.Open))
    {
        XmlSerializer ser = new XmlSerializer(typeof(MySettings));
        ser.Serialize(fs, this);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用FileMode.Open一切都很好,输出是这样的:

<?xml version="1.0"?>
<MySettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <settingsList>
        <Setting>
            <Value>12</Value>
            <Name>A0</Name>
            <Type>MEASUREMENT</Type>
        </Setting>
        <Setting>
            <Value>5000</Value>
            <Name>C0</Name>
            <Type>MEASUREMENT</Type>
        </Setting>
    </settingsList>
</MySettings>
Run Code Online (Sandbox Code Playgroud)

但是当我将其更改为FileMode.OpenOrCreateoutput 时将更改为:

<?xml version="1.0"?>
<MySettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <settingsList>
        <Setting>
            <Value>12</Value>
            <Name>A0</Name>
            <Type>MEASUREMENT</Type>
        </Setting>
        <Setting>
            <Value>5000</Value>
            <Name>C0</Name>
            <Type>MEASUREMENT</Type>
        </Setting>
    </settingsList>
</MySettings>>
Run Code Online (Sandbox Code Playgroud)

是什么使整个 xml 文件由于>末尾的附加标志而损坏。

这是可以解释的还是它的 c# 错误?

ssz*_*rek 5

我刚刚重现了那个问题。正如我在评论中所写。

FileMode.Open擦除文件的内容,而FileMode.OpenOrCreate不会。

文件的新内容似乎比以前短一个字符,这就是为什么您会在末尾看到“>”。

如果您正在编写FileMode.Create应该为您做的文件使用。