void Save(List <string> list, int max) { using (MemoryStream ms = new MemoryStream()) { XmlTextWriter x = null; try { x = new XmlTextWriter(ms, Encoding.UTF8); if (x == null) { Debug.Assert(false); return; } x.Formatting = Formatting.Indented; x.WriteStartDocument(); x.WriteStartElement("RecentFiles"); foreach (string filepath in list) { x.WriteStartElement("RecentFile"); x.WriteAttributeString("Filepath", filepath); x.WriteEndElement(); } x.WriteEndElement(); x.WriteEndDocument(); x.Flush(); using (XmlPersister.SmartStream ss = OpenStream(FileMode.Create)) { ss.Stream.SetLength(0); ms.Position = 0; byte[] buffer = new byte[1 << 20]; for (; ;) { int bytes = ms.Read(buffer, 0, buffer.Length); if (bytes == 0) { break; } ss.Stream.Write(buffer, 0, bytes); } } } finally { if (x != null) { x.Close(); } } } }
List <string> Load(int max) { List <string> list = new List <string>(max); using (MemoryStream ms = new MemoryStream()) { using (XmlPersister.SmartStream ss = OpenStream(FileMode.OpenOrCreate)) { if (ss.Stream.Length == 0) { return(list); } ss.Stream.Position = 0; byte[] buffer = new byte[1 << 20]; for (; ;) { int bytes = ss.Stream.Read(buffer, 0, buffer.Length); if (bytes == 0) { break; } ms.Write(buffer, 0, bytes); } ms.Position = 0; } XmlTextReader x = null; try { x = new XmlTextReader(ms); while (x.Read()) { switch (x.NodeType) { case XmlNodeType.XmlDeclaration: case XmlNodeType.Whitespace: break; case XmlNodeType.Element: switch (x.Name) { case "RecentFiles": break; case "RecentFile": if (list.Count < max) { list.Add(x.GetAttribute(0)); } break; default: Debug.Assert(false); break; } break; case XmlNodeType.EndElement: switch (x.Name) { case "RecentFiles": return(list); default: Debug.Assert(false); break; } break; default: Debug.Assert(false); break; } } } finally { if (x != null) { x.Close(); } } } return(list); }