Optional closing bracket in xml

I use this example to save some variables in an XML file:

how to set current class to return type results

This is my code for the settings file:

using System; using System.IO; using System.Xml.Serialization; namespace ssscc.Settings { public class AppSettings { public string ReceiptLine1 { set; get; } public string ReceiptLine2 { set; get; } public string ReceiptLine3 { set; get; } public string ReceiptLine4 { set; get; } public string ReceiptLine5 { set; get; } public string ReceiptLine6 { set; get; } public bool ReceiptLine1Enabled { set; get; } public bool ReceiptLine2Enabled { set; get; } public bool ReceiptLine3Enabled { set; get; } public bool ReceiptLine4Enabled { set; get; } public bool ReceiptLine5Enabled { set; get; } public bool ReceiptLine6Enabled { set; get; } public string GatewayUserName { set; get; } public string GatewayPassword { set; get; } public string GatewayId { set; get; } private static string GetSettingsFile() { var exePath = System.Windows.Forms.Application.StartupPath; var sharedDirectory = Path.Combine(exePath, "shared"); var settingsDirectory = Path.Combine(sharedDirectory, "settings"); var settingsFile = Path.Combine(settingsDirectory, "ssscc.xml"); if (!Directory.Exists(sharedDirectory)) { Directory.CreateDirectory(sharedDirectory); } if (!Directory.Exists(settingsDirectory)) { Directory.CreateDirectory(settingsDirectory); } return settingsFile; } internal void SaveSettings() { var serializer = new XmlSerializer(typeof(AppSettings)); using (var stream = File.OpenWrite(GetSettingsFile())) serializer.Serialize((Stream)stream, this); } internal static AppSettings GetInstance() { try { if (!File.Exists(GetSettingsFile())) return null; var serializer = new XmlSerializer(typeof(AppSettings)); using (var stream = File.OpenRead(GetSettingsFile())) { return (AppSettings)serializer.Deserialize(stream); } } catch (Exception ex) { Console.WriteLine(ex.Message); throw; } } } } 

When I save the data, the initial save stops and at the end of the file is displayed:

 <?xml version="1.0"?> <AppSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ReceiptLine1 /> <ReceiptLine2 /> <ReceiptLine3 /> <ReceiptLine4 /> <ReceiptLine5 /> <ReceiptLine6 /> <ReceiptLine1Enabled>false</ReceiptLine1Enabled> <ReceiptLine2Enabled>true</ReceiptLine2Enabled> <ReceiptLine3Enabled>false</ReceiptLine3Enabled> <ReceiptLine4Enabled>false</ReceiptLine4Enabled> <ReceiptLine5Enabled>false</ReceiptLine5Enabled> <ReceiptLine6Enabled>false</ReceiptLine6Enabled> <GatewayUserName>asdfasdf</GatewayUserName> <GatewayPassword>asdf</GatewayPassword> <GatewayId>sdf</GatewayId> </AppSettings> 

When I update the file and save it again, I get the following:

 <?xml version="1.0"?> <AppSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ReceiptLine1 /> <ReceiptLine2 /> <ReceiptLine3 /> <ReceiptLine4 /> <ReceiptLine5 /> <ReceiptLine6 /> <ReceiptLine1Enabled>false</ReceiptLine1Enabled> <ReceiptLine2Enabled>true</ReceiptLine2Enabled> <ReceiptLine3Enabled>false</ReceiptLine3Enabled> <ReceiptLine4Enabled>false</ReceiptLine4Enabled> <ReceiptLine5Enabled>false</ReceiptLine5Enabled> <ReceiptLine6Enabled>false</ReceiptLine6Enabled> <GatewayUserName>asdfasdf</GatewayUserName> <GatewayPassword>asdf</GatewayPassword> <GatewayId>sdf</GatewayId> </AppSettings>> 

What does he see at the end >> .

Does anyone see why it saves two >> at the end of my xml file?

And my code errors:

+4
source share
1 answer

This is because you are using File.OpenWrite :

For an existing file, it does not add new text to existing text. Instead, it overwrites existing characters with new characters. If you rewrite a longer line (for example, “This is a test of the OpenWrite method”) with a shorter line (for example, “Second run”), the file will contain a combination of lines (“Second runtest of the OpenWrite method”).

Although it’s not clear from your example, I suspect that the new content is one byte shorter than the old, so you see the angle closure bracket from the source file.

I suspect you should just use File.Create .

+9
source

All Articles