Как сохранить определенное количество текстовых файлов в изолированном хранилище? - PullRequest
0 голосов
/ 04 февраля 2012

В моем приложении WP7 пользователи могут отправлять сообщения на подключенный сервер.

Для этого у меня есть текстовое поле с именем "msgBox".

И кнопка «sendBtn», которая отправляет на сервер текст, написанный в msgBox.

Я хочу сохранить последние 20 отправленных сообщений, не более того.

Как и при доставке 21-го сообщения, 1-е сообщение удаляется, 2-е становится 1-м ...... ......

и новое сообщение становится 20-ым сохраненным сообщением.

Я не очень знаком с изолированным хранилищем, очень базовые знания.

Я не могу понять, как это сделать.

Я буду очень благодарен, если кто-нибудь сможет мне помочь.

1 Ответ

1 голос
/ 04 февраля 2012

Поведение, которое вы описали, соответствует Очередь . Но проблема с .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;
...