Управление доставкой динамического содержимого в Silverlight - API изолированного хранилища

ОГЛАВЛЕНИЕ

API изолированного хранилища

Silverlight BCL поставляется вместе со своей собственной реализацией изолированного хранилища, созданного специально для веб-приложения. Изолированное хранилище обеспечивает доступ к поддереву всей локальной файловой системы, и никакой метод или свойство никогда не позволяют никакому выполняющемуся коду определить физическое местоположение хранилища файлов на компьютере пользователя. В рамках изолированного хранилища приложению Silverlight не разрешается использовать абсолютные пути файловой системы. Также не поддерживаются и не доступны сведения о дисках. То же самое справедливо и для относительных путей, содержащих многоточие, например для следующего.

\..\..\myfile.txt 

Корневой папкой для поддерева изолированного хранилища является папка, находящаяся на следующем по отношению к текущему пути пользователя уровне. Например, в Windows Vista корневая папка для папки изолированного хранилища находится в каталоге Users.

Приложение Silverlight получает доступ к точке входа в изолированное хранилище, которая предназначена для определенного приложения, посредством вызова метода.

using (IsolatedStorageFile iso = 
    IsolatedStorageFile.GetUserStoreForApplication()) 
{
  ...
}

Статический метод GetUserStoreForApplication возвращает маркер, который используется для любого последующего доступа к изолированному хранилищу. После первого вызова метода GetUserStoreForApplication создается, если оно еще не существует, поддерево для конкретного приложения.

Интерфейс API изолированного хранилища Silverlight поставляет классы для работы с файлами и каталогами в пределах защищенного поддерева файловой системы. К счастью, список классов, которые требуется знать, очень короткий; они перечислены на рис. 2.

 

В классе IsolatedStorageFile имеется ряд методов для создания и удаления файлов и каталогов, проверки наличия файлов и каталогов и чтения и записи новых файлов. Для работы с файлами используются потоки. При желании потоки можно заключить в модули чтения потоков, работать с которыми намного удобнее. На рис. 3 приведен краткий пример создания файла изолированного хранилища с помощью модуля записи потоков.

Рис. 3 Создание файла изолированного хранилища

using (IsolatedStorageFile iso = 
    IsolatedStorageFile.GetUserStoreForApplication())
{
   // Open or create the low level stream
   IsolatedStorageFileStream fileStream;
   fileStream = new IsolatedStorageFileStream(fileName, 
     FileMode.OpenOrCreate, iso);

   // Encapsulate the raw stream in a more convenient writer
   StreamWriter writer = new StreamWriter(stream);

   // Write some data
   writer.Write(DateTime.Now.ToString());

   // Clean up
   writer.Close();
   stream.Close();
}

После заключения потока низкого уровня в более удобный модуль чтения или записи потоков код, используемый для записи (или чтения) данных, практически не отличается от кода, используемого в классическом приложении .NET. Давайте поймем, как воспользоваться преимуществами интерфейса API изолированного хранилища для локального сохранения любого загруженного пакета XAP и последующей повторной его загрузки.