如何在隔离存储中保存特定数量的文本文件..?

时间:2012-02-04 12:29:28

标签: c# windows-phone-7 windows-phone-7.1 isolatedstorage

在我的WP7应用程序中,用户可以将mesage发送到连接的某个服务器。

为此,我有一个名为" msgBox"。

的文本框

按钮" sendBtn"它将用msgBox编写的文本发送到服务器。

我想保存最后20条发送消息,不超过这个。

就像第21个消息传递一样,第1个消息被删除,第2个消息变成第1个消息......

并且新的msg成为第20个已保存的消息。

我不太熟悉隔离存储,非常基础的知识。

我无法弄清楚如何做到这一点。

如果有人可以帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:1)

您所描述的行为符合Queue。但.Net Queue的问题在于它无法直接保存到隔离存储(序列化问题)。由于你只有20个元素就足以使用一个列表而只删除第一个元素。

 private List<string> messages = new List<string>(MAX_ITEMS);
 private const int MAX_ITEMS = 20;
 private void userAddMessege(string message)
 {

        messages.Add(message);
        if (messages.Count > MAX_ITEMS) 
        {
            messages.RemoveAt(0);
        }
  }

我假设您要使用IsolatedStorage,因为您希望在用户退出应用程序时保存邮件并恢复用户返回的邮件。我使用一个简单的包装器

using System;
using System.Net;
using System.Windows;
using System.IO.IsolatedStorage;
using System.Collections.Generic;
using System.Collections.ObjectModel;

namespace YourProjectNamespace
{
    public class AppSettings
    {
        // Isolated storage settings
        private IsolatedStorageSettings m_isolatedStore;

        public AppSettings()
        {
            try
            {
                // Get the settings for this application.
                m_isolatedStore = IsolatedStorageSettings.ApplicationSettings;
            }
            catch (Exception e)
            {
                MessageBox.Show("Exception while using IsolatedStorageSettings: " + e.ToString());
            }
        }

        /// <summary>
        /// Update a setting value for our application. If the setting does not
        /// exist, then add the setting.
        /// </summary>
        /// <param name="Key">Key to object</param>
        /// <param name="value">Object to add</param>
        /// <returns>if value has been changed returns true</returns>
        public bool AddOrUpdateValue(string Key, Object value)
        {
            bool valueChanged = false;

            try
            {
                if (m_isolatedStore.Contains(Key))
                {
                    // if new value is different, set the new value.
                    if (m_isolatedStore[Key] != value)
                    {
                        m_isolatedStore[Key] = value;
                        valueChanged = true;
                    }
                }
                else
                {
                    m_isolatedStore.Add(Key, value);
                    valueChanged = true;
                }
            }
            catch (ArgumentException)
            {
                m_isolatedStore.Add(Key, value);
                valueChanged = true;
            }
            catch (Exception e)
            {
                MessageBox.Show("Exception while using IsolatedStorageSettings: " + e.ToString());
            }

            return valueChanged;
        }

        /// <summary>
        /// Get the current value of the setting, or if it is not found, set the 
        /// setting to an empty List.
        /// </summary>
        /// <typeparam name="valueType"></typeparam>
        /// <param name="Key"></param>
        /// <returns></returns>
        public List<DefType> GetListOrDefault<DefType>(string Key)
        {
            try
            {
                if (m_isolatedStore.Contains(Key))
                {
                    return (List<DefType>)m_isolatedStore[Key];
                }
                else
                {
                    return new List<DefType>();
                }
            }
            catch (ArgumentException)
            {
                return new List<DefType>();
            }
            catch (Exception e)
            {
                MessageBox.Show("Exception while using IsolatedStorageSettings: " + e.ToString());
            }

            return new List<DefType>();
        }

        public List<String> Messages
        {
            get
            {
                return this.GetListOrDefault<String>("Messeges");
            }

            set
            {
                this.AddOrUpdateValue("Messeges", value);
                this.Save();
            }
        }

        /// <summary>
        /// Delete all data
        /// </summary>
        public void DeleteAll()
        {
            m_isolatedStore.Clear();
        }

        /// <summary>
        /// Save the settings.
        /// </summary>
        public void Save()
        {
            m_isolatedStore.Save();
        }
    }
}

然后只需添加到页面

private AppSettings m_appSettings = new AppSettings();

从IsolatedStorage获取消息:

var messages = m_appSettings.Messages;

保存它们:

 m_appSettings.Messages = messages;