Практическое руководство. Получение хранилищ для изолированного хранения

Изолированное хранилище предоставляет виртуальную файловую систему в секции данных. Класс 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

См. также