Пример #1
0
            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();
                        }
                    }
                }
            }
Пример #2
0
            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);
            }