Практическое руководство. Получение хранилищ для изолированного хранения
Изолированное хранилище предоставляет виртуальную файловую систему в секции данных. Класс IsolatedStorageFile предоставляет ряд методов для взаимодействия с изолированным хранилищем. IsolatedStorageFile содержит три статических метода, позволяющих создать и получить хранилище:
GetUserStoreForAssembly возвращает хранилище, изолированное по пользователю и сборке.
GetUserStoreForDomain возвращает хранилище, изолированное по домену и сборке.
Хранилище, полученное любым из этих двух методов, принадлежит коду, из которого они вызваны.
Статический метод GetStore возвращает изолированное хранилище, которое определяется комбинацией переданных параметров области.
Следующий код возвращает хранилище, изолированное по пользователю, сборке и домену.
IsolatedStorageFile^ isoStore = IsolatedStorageFile::GetStore(IsolatedStorageScope::User |
IsolatedStorageScope::Assembly | IsolatedStorageScope::Domain, (Type ^)nullptr, (Type ^)nullptr);
IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain, null, null);
Dim isoStore As IsolatedStorageFile = IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or
IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain, Nothing, Nothing)
Вы можете использовать метод GetStore, чтобы определить перемещаемое хранилище для перемещаемого профиля пользователя. Дополнительные сведения о такой настройке см. в статье о типах изоляции.
Как очевидно из названия, изолированные хранилища из разных сборок являются разными хранилищами. Вы можете получить доступ к хранилищу другой сборки или другого домена, передав свидетельство сборки или домена в параметрах метода GetStore. Для такого действия вам потребуются права на доступ к изолированному хранилищу по идентификатору домена приложения. Дополнительную информацию см. в описании перегрузок метода GetStore.
Методы GetUserStoreForAssembly, GetUserStoreForDomain и GetStore возвращают объект IsolatedStorageFile. Чтобы правильно выбрать тип изоляции для конкретного случая, изучите статью о типах изоляции. Получив объект файла изолированного хранилища, вы можете использовать методы изолированного хранилища для чтения, записи, создания и удаления файлов и каталогов в нем.
Не существует механизмов защиты, препятствующих передаче объекта IsolatedStorageFile в код, который не имеет соответствующих прав для доступа к этому хранилищу. Идентификаторы доменов и сборок, а также разрешения для изолированного хранилища проверяются только при получении ссылки на объект IsolatedStorage, то есть обычно в методах GetUserStoreForAssembly, GetUserStoreForDomain или GetStore. Таким образом, защита ссылок на объекты IsolatedStorageFile возлагается на код, использующий такие ссылки.
Пример
Ниже приведен простой пример класса, который получает хранилище, изолированное по пользователю и сборке. Чтобы получить хранилище, изолированное по пользователю, домену и сборке, измените приведенный код, добавив IsolatedStorageScope.Domain в аргументы, которые передает метод GetStore.
Когда выполните этот код, проверьте успешно ли создано хранилище. Для этого введите в командной строке команду StoreAdm /LIST. Она запустит средство изолированного хранилища (Storeadm.exe) и выведет полный список выделенных пользователю изолированных хранилищ.
using namespace System;
using namespace System::IO::IsolatedStorage;
public ref class ObtainingAStore
{
public:
static void Main()
{
// Get a new isolated store for this assembly and put it into an
// isolated store object.
IsolatedStorageFile^ isoStore = IsolatedStorageFile::GetStore(IsolatedStorageScope::User |
IsolatedStorageScope::Assembly, (Type ^)nullptr, (Type ^)nullptr);
}
};
using System;
using System.IO.IsolatedStorage;
public class ObtainingAStore
{
public static void Main()
{
// Get a new isolated store for this assembly and put it into an
// isolated store object.
IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
IsolatedStorageScope.Assembly, null, null);
}
}
Imports System.IO.IsolatedStorage
Public Class ObtainingAStore
Public Shared Sub Main()
' Get a new isolated store for this assembly and put it into an
' isolated store object.
Dim isoStore As IsolatedStorageFile = IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or
IsolatedStorageScope.Assembly, Nothing, Nothing)
End Sub
End Class