Dùng Isolated Storage


Silverlight dùng Isolated Storage như một hệ thống file ảo để lưu trữ dữ liệu trong một thư mục ẩn trên máy tính của bạn. Nó chia dữ liệu vào làm 2 phân riêng biệt: Phần thứ nhất chứa các thông tin quản lý như dung lượng cho phép và phần thứ 2 chứa dữ liệu thực sự. Mỗi ứng dụng Silverlight được phân bố một vùng riêng trong hệ thống lưu trữ này với dung lượng lưu trữ mặc nhiên là 1 MB.

Ưu điểm:

1. Isolated Storage là một thay thế tuyệt vời cho cookie, đặc biệt là nếu bạn đang làm việc với một tập lớn dữ liệu. Một số ví dụ về khả năng của Isolated Storage bao gồm undo lại một số thao tác của ứng dụng, hay giỏ hàng, các cài đặt về cửa sổ hay bất kỳ cài đặt nào mà bạn muốn truy cập vào lần nạp tiếp theo.

2. Isolated Storage lưu trữ theo người dùng cho phép các ứng dụng lưu giữ các cài đặt cho từng người dùng riêng biệt.

Một số vấn đề có thể xảy ra:

1. Người quản trị có thể đặt giới hạn đĩa trên mỗi người dùng và assembly, không có bất kỳ cảnh báo nào về không gian trống còn lại. Vì lý do này, bạn nên kiểm tra và bắt các ngoại lệ trong ứng dụng của bạn.

2. Dù rằng Isolated Storage được đặt trong một thư mục ẩn trong hệ thống, nhưng không có nghĩa người dùng không thể tìm ra thư mục này, do vậy Isolated Storage không hoàn toàn an toàn và người dùng có thể thay đổi hoặc xóa các file. Tuy nhiên, nếu muốn người dùng không thể thay đổi các file, bạn có thể dùng các lớp mã hóa để mã lại các file này trước khi lưu.

3. Các máy tính có thể bị khóa bởi các chính sách bảo mật và các ứng dụng sẽ không thể lưu được vào IsolatedStorage. Cụ thể hơn, bạn cần có IsolatedStorageFilePermission để có thể làm việc được với IsolatedStorage.

Giờ hãy xem qua ví dụ về việc lưu và đọc dữ liệu từ IsolatedStorage. Nhớ rằng bạn cần dùng phát biểu using để tham chiếu đến namespace System.IO.IsolatedStorage as well as System.IO.

using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO.IsolatedStorage;
using System.IO;

namespace SilverlightApplication10
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
            SaveData("Hello There", "MyData.txt");
            string test = LoadData("MyData.txt");
        }

        private void SaveData(string data, string fileName)
        {
            using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName, FileMode.Create, isf))
                {
                    using (StreamWriter sw = new StreamWriter(isfs))
                    {
                        sw.Write(data);
                        sw.Close();
                    }
                }
            }
        }

        private string LoadData(string fileName)
        {
            string data = String.Empty;

            using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName, FileMode.Open, isf))
                {
                    using (StreamReader sr = new StreamReader(isfs))
                    {
                        string lineOfData = String.Empty;
                        while ((lineOfData = sr.ReadLine()) != null)
                            data += lineOfData;
                    }
                }
            }
            return data;
        }
    }
}

Dịch từ: http://silverlight.net/blogs/msnow/archive/2008/07/16/tip-of-the-day-19-using-isolated-storage.aspx

3 thoughts on “Dùng Isolated Storage

  1. Chào anh Nam, khi lập trình Silverlight 2 beta 2 sử dụng đối tượng MediaElement em gặp một vấn đề như sau:

    Visual Studio 2008 bị đứng. Nếu thay giá trị Source bằng một đường dẫn local chẳng hạn “Myclip.wmv” thì không vấn đề gì. Nhưng để một cái Url vào thì die ngay.
    Em xử lý bằng cách để giá trị Source là rỗng, sau đó add source cho MediaElement từ file C# bằng cách tạo một button trên giao diện xaml, sau đó gán sự kiện vào button đó và vào
    Page.xaml.cs làm việc. Trong hàm này em dùng câu lệnh media.Source = new Uri(http://silverlight.services.live.com/75833/CATH/video.wmv“);
    bị báo lỗi “AG_E_PARSER_BAD_PROPERTY_VALUE [Line: 6 Position: 87]”.
    Mong nhận được sự giúp đỡ của mọi người. Thanks.

  2. Chào Thầy!
    Em hiện có viết ứng dụng trên windows phone là tra cứu karaoke!
    Em gặp phải 1 vấn đề là do dữ liệu lớn dẫn tới việc tìm kiếm bị delay!
    Em tìm kiếm theo kiểu tự động!
    VD: Click chữ anh nó tự load bài hát có chữ anh mà không cần bấm nút tìm kiếm => khi em bấm 1 từ thì 2 -5 giây sau từ đó mới hiện trên textbox
    em đã có search nhiều nguồn, tham khảo nhiều người chỉ giáo nhưng vẫn ko dc! mong thầy giúp em ah!
    Em xin cảm ơn!
    (Em search bằng LINQ )
    //Từ tìm kiếm
    string search = ConvertToUnsign(send.Text).ToLower();
    //dùng LINQ truy xuất
    res = res.Where(p => ConvertToUnsign(p.Song_Name).ToLower().StartsWith(search) && ConvertToUnsign(p.Song_Name).ToLower().Contains(search));
    //Trã kết quả vào list
    lstResult.ItemsSource = res;

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s