FileMode.Open and FileMode.OpenOrCreate difference when file exists? c# bug?

筅森魡賤 提交于 2019-11-26 11:36:47

问题


I have wrote that code:

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);
    }
}

When I am using FileMode.Open everything is good, and output is e.x. like this:

<?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>

but when I change it to FileMode.OpenOrCreate output will change to:

<?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>>

what makes whole xml file corrupted because of additional > sign at the end.

Is this explanable or its c# bug?


回答1:


I have just reproduced that issue. As I wrote in comment.

FileMode.Open erases contents of the file while FileMode.OpenOrCreate does not.

It seems that new content of the file is one char shorter than previous that's why you see ">" at the end.

If you are writing the file use FileMode.Create that should do for you.



来源:https://stackoverflow.com/questions/29799265/filemode-open-and-filemode-openorcreate-difference-when-file-exists-c-sharp-bug

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!