Isolatedstorage что это за папка
Перейти к содержимому

Isolatedstorage что это за папка

  • автор:

Использование Isolated Storage в Windows Phone 7

Для хранения данных в Windows Phone 7 используется механизм Isolated Storage, который успешно используется в приложениях Silverlight. Давайте попробуем поработать с Isolated Storage.

Isolated Storage предполагает, что для каждого приложения существует изолированная среда для хранения данных.Приложения не могут получать доступ к хранилищу других приложений (в основном из соображений безопасности). Само хранилище при этом разделяется на две части:

  • Isolated Settings Storage;
  • Isolated File Storage

Хранилище Isolated Settings Storage предназначено для хранения настроек приложения. Хранение настроек осуществляется в специальном словаре (ключ-значение) и очень похоже на то, как работают аналогичные механизмы в настольной платформе.

Хранилище Isolated File Storage предназначено для хранения различных данных в виде файлов. При этом это хранилище можно структурировать, используя разбиение на папки. Фактически, это – некоторый доступ к файловой системе изолированного хранилища.

Для организации механизма хранения данных в Windows Phone 7 SDK используется следующий набор объектов:

  • System.IO.IsolatedStorage.IsolatedStorageSettings – предоставляет доступ к словарю (ключ-значение) настроек для текущего хранилища (Isolated Settings Storage);
  • System.IO.IsolatedStorage.IsolatedStorageFile – позволяет получить доступ к хранилищу данных(Isolate File Storage);
  • System.IO.IsolatedStorage.IsolatedFileStream – позволяет получить доступ к содержимому файла в хранилище (Isolate File Storage);
  • System.IO.IsolatedStorage. IsolatedStorageException – исключение, возникающее при ошибках в работе с хранилищем.

Хранение настроек

Для доступа к настройкам приложения используется класс IsolatedStorageSettings. Этот класс представляет собой словарь, при помощи которого по ключу можно обратиться к конкретной настройке. Для доступа к значению используется индексатор. Например, получить доступ к ключу “count” можно используя следующий код.

 int count = (int)System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings["count"]; 

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

 int count = 0; if (System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.Contains("count") == true)

Аналогичным образом можно работать с любыми ключами Isolated Settings Storage.

Изменение настроек приложения также выполняется достаточно просто. Для этого следует изменить нужный ключ и вызвать метод Save.

 System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings["count"] = count; System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.Save(); 

Так, например, можно написать несложный код по подсчету количества запусков приложения и отображения этой информации пользователю. Для этого добавим на форму элемент TextBlock и будем инкрементировать счетчик при каждом запуске приложения. Эту логику можно поместить, например, в конструктор.

 public MainPage() < InitializeComponent() SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape; int count = 0; if (System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.Contains("count") == true) < count = (int)System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings["count"]; >count++; System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings["count"] = count; System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.Save() textBlock1.Text = count.ToString(); > 

На самом деле, работать с настройками в таком виде не очень удобно – каждый раз приходится проверять наличие ключа в настройках и выполнять приведение типов. По-хорошему, тут еще нужно проверять на соответствие типов перед выполнением приведения типов. Поэтому давайте создадим небольшую надстройку для класса IsolatedStorageSettings.

Надстройка будет представлять с собой несколько методов-расширений для класса IsolatedStorageSettings. Для получения настроек в типизированном виде создадим метод GetSetting, который будет принимать в качестве параметра имя ключа и значение по умолчанию (если, например, ключ не найден). Также сделаем перегруженную версию метода, чтобы можно было не указывать значение по умолчанию. Внутри этого метода выполним все действия, которые мы видели с вами раньше.

 public static class IsolatedStorageSettingsExtensions < public static T GetSetting(this System.IO.IsolatedStorage.IsolatedStorageSettings settings, string keyName) < return GetSetting(settings, keyName, default(T)) >public static T GetSetting(this System.IO.IsolatedStorage.IsolatedStorageSettings settings, string keyName, T defaultValue) < if (settings != null) < if (settings.Contains(keyName) == true) < try < return (T)settings[keyName]; >catch (InvalidCastException) < >> > return defaultValue; > > 

Теперь доступ к настройкам немного упростился. Для того, чтобы получить значение, можно просто вызвать метод-расширение с нужными параметрами. Перепишем с учетом этого, код, который использовался выше.

 public MainPage() < InitializeComponent(); SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape; int count = System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.GetSetting("count"); count++; System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings["count"] = count; System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.Save(); textBlock1.Text = count.ToString(); > 

Мы также можем указать значение по умолчанию, которое будет использоваться, если ключ не найден в настройках. Например, мы можем вести отсчет с числа 10.

 int count = System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.GetSetting("count", 10); 

Аналогичный метод расширения сделаем и для сохранения настроек. Тогда весь класс, содержащий методы-расширения будет выглядеть следующим образом.

 public static class IsolatedStorageSettingsExtensions < public static T GetSetting(this System.IO.IsolatedStorage.IsolatedStorageSettings settings, string keyName) < return GetSetting(settings, keyName, default(T)); >public static T GetSetting(this System.IO.IsolatedStorage.IsolatedStorageSettings settings, string keyName, T defaultValue) < if (settings != null) < if (settings.Contains(keyName) == true) < try < return (T)settings[keyName]; >catch (InvalidCastException) < >> > return defaultValue; > public static void SaveSetting(this System.IO.IsolatedStorage.IsolatedStorageSettings settings, string keyName, T value) < if (settings != null) < settings[keyName] = value; settings.Save(); >> > 

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

 public MainPage() < InitializeComponent(); SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape; int count = System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.GetSetting("count", 10); System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings.SaveSetting("count", ++count); textBlock1.Text = count.ToString(); > 

Хранение данных

Для доступа к файловому хранилищу используется класс IsolatedStorageFile. Обратившись к его статическому методу GetUserStoreForApplication() можно получить доступ к объекту, предоставляющему всевозможные методы для работы с файлами и папками:

  • GetDirectoryNames – позволяет получить список всех папок в заданном контексте;
  • GetFileNames – позволяет получить список всех файлов в заданном контексте;
  • CreateDirectory – позволяет создать папку;
  • DeleteDirectory – позволяет удалить папку;
  • DirectoryExists – позволяет проверить наличие папки;
  • CreateFile = позволяет создать файл;
  • OpenFile – позволяет открыть файл для чтения и/или изменения;
  • DeleteFile – позволяет удалить файл;
  • FileExists – позволяет проверить наличие файла.

Как видно, для работы с файлом используется метод OpenFile. Этот файл возвращает поток, с которым можно работать так, как мы это делаем обычно (например, используя StreamReader/StreamWriter). Например, код для записи информации в файл будет выглядеть следующим образом.

 using (var file = IsolatedStorageFile.GetUserStoreForApplication().CreateFile("test1.txt")) < using (var fileWriter = new StreamWriter(file)) < fileWriter.WriteLine(DateTime.Now.ToString()); >> 

Аналогичным образом выглядит код для считывания содержимого файла.

 using (var file = IsolatedStorageFile.GetUserStoreForApplication().OpenFile("test1.txt", FileMode.Open)) < using (var fileReader = new StreamReader(file)) < MessageBox.Show(fileReader.ReadToEnd(), "File", MessageBoxButton.OK); >> 

Давайте добавим в конструктор нашего приложения логику, согласно которой приложение будет проверять наличие файла в хранилище и, если его там нет, записывать в него текущее время; в противном случае – отображать его пользователю.

 public MainPage() < // . if (IsolatedStorageFile.GetUserStoreForApplication().FileExists("test1.txt") == false) < using (var file = IsolatedStorageFile.GetUserStoreForApplication().CreateFile("test1.txt")) < using (var fileWriter = new StreamWriter(file)) < fileWriter.WriteLine(DateTime.Now.ToString()); >> > else < using (var file = IsolatedStorageFile.GetUserStoreForApplication().OpenFile("test1.txt", FileMode.Open)) < using (var fileReader = new StreamReader(file)) < MessageBox.Show(fileReader.ReadToEnd(), "File", MessageBoxButton.OK); >> > > 

Таким образом, без особых усилий мы создали небольшое приложение, работающее с Isolated Storage — Isolated Settings Storage и Isolated File Storage. Как видно, на это не требуется много усилий, а работа с хранилищем очень похожа на аналогичные операции в настольном Silverilght. Тем не менее, по сравнению с хранилищем в Silverilght, хранилище в Windows Phone не имеет ограничений, связанных с объемом хранимой информации.

Успехов вам в создании ваших мобильных приложений!

Доступ к картинкам в изолированном хранилище

Выполнив несколько проектов на wp7, я столкнулся с часто возникающей задачей: хранения изображений в изолированном хранилище и последующей отрисовкой этих изображений. При просмотре тематических блогов и статей я не обнаружил ничего кроме самого прямого и простого ресурсоемкого способа это сделать. Как оказывается — так делают все! Итак, давайте поговорим об этом способе и о моем небольшом отркытии.

Для хранения данных на диске используется Isolated Storage. Этот класс позволяет разработчику получить доступ к изолированному каталогу на диске. К этому каталогу может получить доступ только одно приложение и в нем можно создавать иерархическую структуру для хранения данных. Это одновременно и хорошо и плохо — ведь не получится расшарить данные между приложениями. Но задача с изображениями остается все такой же важной. С другой стороны, если эта задача необходима для кеширования изображения для работы офлайн — стоит подумать: ведь система кеширует изображения самостоятельно, возможно в вашем приложении и нет необходимости реализовывать кеширование вручную. Итак:

Способ №1 — самый «простой»

Сохраняем картинки в хранилище любым удобным вам способом. Теперь для отображения изображения необходимо использовать изолированное хранилище. Из хранилища в поток читается изображение, после чего изображение из потока попадает в BitmapImage и этот объект присваивается свойству Source.
Упрощенный конвертор который проделывает вышеописанные действия:

public class IsoImageConverter : IValueConverter < //Convert Data to Image when Loading Data public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) < var bitmap = new BitmapImage(); try < var path = (string)value; if (!String.IsNullOrEmpty(path)) < using (var file = LoadFile(path)) < bitmap.SetSource(file); >> > catch < >return bitmap; > private Stream LoadFile(string file) < using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication()) < return isoStore.OpenFile(file, FileMode.Open, FileAccess.Read); >> public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) < throw new NotImplementedException(); >> 

Этот способ описывается везде как способ для отображения изображения из IS

Теперь способ №2 — самый нетривиальный

Однажды мне была дана задача: исследовать возможность построения offline карт с помощью существующего компонента карт. Я накачал изображений в IS я решил попробовать применить способ номер 1. Ничего не вышло. Поломав голову несколько часов, я вспомнил как когда-то читал где-то про то, что эмулятор, который установлен на виндовой машине можно расковырять и получить путь к приложению и файлам в хранилище. Что ж, если есть путь и доступ по этому пути возможен только из приложения — наверное, можно будет вставить ссылку на картинку в Image и она отобразиться. Итак, что было сделано:

Для начала в дебагере была отловлена ссылка на изображение при сохранении.

Путь: \Applications\Data\AD105BA4-EC12-49E0-9077-B5D95DBA2FEE\Data\IsolatedStore\test\SplashScreenImage.jpg

Теперь имея путь к картинке можно использовать его как Source у изображения. Но, как оказалось, необходимо использовать только абсолютные пути, потому необходимо добавить префикс file:///

Убеждаемся что картинка там и что она не повреждена:

и вставляем такой код в XAML:

С мап компонентом ничего не вышло, но ценный опыт для себя вынес. В итоге был найден более простой способ отображения изображений из IsolatedStorage.

P.S: Картинки из папки Shared таким способом вытянуть не получилось.

  • windows phone 7
  • windows phone
  • wp7
  • wp7 development
  • Silverlight
  • Разработка под Windows Phone

Isolated Storage Класс

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Представляет абстрактный базовый класс, от которого должны наследоваться все реализации изолированного хранения.

public ref class IsolatedStorage abstract : MarshalByRefObject
public abstract class IsolatedStorage : MarshalByRefObject
[System.Runtime.InteropServices.ComVisible(true)] public abstract class IsolatedStorage : MarshalByRefObject
type IsolatedStorage = class inherit MarshalByRefObject
[] type IsolatedStorage = class inherit MarshalByRefObject
Public MustInherit Class IsolatedStorage Inherits MarshalByRefObject

Наследование
IsolatedStorage
Производный

Комментарии

Вызов методов этого класса для ненадежных данных представляет угрозу безопасности. Вызывайте методы класса только для надежных данных. Дополнительные сведения см. в разделе Проверка всех входных данных.

Сведения об изолированном хранилище на основе файлов см. в IsolatedStorageFile разделе Класс .

Изолированное хранилище недоступно для приложений Магазина Windows 8.x. Вместо этого используйте классы данных приложений в пространствах имен Windows.Storage , включенных в API среды выполнения Windows для хранения локальных данных и файлов. Дополнительные сведения см. в статье Доступ к данным приложения в Центре разработки для Windows.

Конструкторы

Инициализирует новый экземпляр класса IsolatedStorage.

Свойства

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

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

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

Является устаревшей.
Является устаревшей.
Является устаревшей.

Возвращает значение, показывающее текущий размер изолированного хранения.

Возвращает удостоверение домена, которое ограничивает область действия изолированного хранения.

Является устаревшей.
Является устаревшей.
Является устаревшей.

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

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

Получает значение перечисления IsolatedStorageScope, ограничивающее область, используемую для изоляции хранилища.

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

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

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

Методы

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

Определяет, равен ли указанный объект текущему объекту.

Служит хэш-функцией по умолчанию.

Является устаревшей.

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

При реализации с помощью производного класса возвращает разрешение, представляющее доступ к изолированному хранению в наборе разрешений.

Возвращает объект Type для текущего экземпляра.

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

Является устаревшей.

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

Инициализирует новый объект IsolatedStorage.

Инициализирует новый объект IsolatedStorage.

Создает неполную копию текущего объекта Object.

Создает неполную копию текущего объекта MarshalByRefObject.

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

Возвращает строку, представляющую текущий объект.

IsolatedStorage — что это за папка, можно ли удалить?

  • Описание
  • Разбираемся
  • Вывод

Приветствую уважаемые ребята! Будем разбираться сегодня с папкой IsolatedStorage — что это? Можно ли удалить? От какой программы? Постараемся все выяснить. Помните, что просто так удалять нельзя никакие папки, впрочем как и программы, иначе потом компьютер может работать нестабильно.

Описание

IsolatedStorage — папка, представляет из себя изолированное хранилище для настроек, может использоваться некоторыми установленными программами на ПК.

Разбираемся

  1. Скажу сразу, что нормальной информации об этой папки нет. Есть инфа из мира программирования, на основе которой и постараемся понять предназначение папки.
  2. Эта папка представляет из себя изолированное пространство, в котором могут хранится данные разных программ. Доступ к этим данным возможен только программам-создателям, а также контролируется системой безопасностью.
  3. Но зачем это нужно? Программы могут использовать изолированное хранилище для сохранения данных в собственной изолированной части файловой системы без указания точного пути. Это данные с сайта Майкрософт.
  4. Если программа А создала данные в директории IsolatedStorage, то программа Б доступ к ним получить не сможет. Только программа А, потому что она является создателем этих данных и она их в папку IsolatedStorage и поместила. Такие правила.
  5. Какие данные могут хранится в IsolatedStorage? Например настройки или служебные данные. Но повторюсь, что точной информации о предназначении папки — нет. Известно одно — она может использоваться разными приложениями, которые установлены на вашем ПК. Удалять эту папку я категорически не советую.
  6. Изолированное хранилище используется не только в обычных Windows для компьютера, но и в мобильных системах Windows Phone 7.

У меня на ПК данная папка тоже есть:

Что важно — создана была папка еще в январе (сейчас у меня октябрь).. примерно тогда я вроде и устанавливал операционку. То есть она была с самого начала. Внутри — папка с непонятным названием, которая тоже была создана в январе:

Ну и внутри этой папки — непонятный файл, был создан уже вначале февраля:

Все. Больше никаких данных в папке нет. Поэтому я делаю вывод, что ничего страшного нет, это не вирус, не левое ПО, это системная директория Windows, которую некоторые программы могут использовать для хранения данных. Весит IsolatedStorage у меня очень мало, меньше мегабайта, поэтому удалять точно смысла нет и вам не советую.

Но если папка весит много — можно попробовать почистить систему утилитой CCleaner, правда сомневаюсь что поможет. При желании — можно пойти на эксперимент, переименовать IsolatedStorage в IsolatedStorage_ и посмотреть что будет. Перед переименованием желательно создать точку восстановления. Если при переименовании будут проблемы — используйте программу Unlocker. Но если после переименования не будет никаких проблем — пусть папка лежит так.. если и дальше не будет проблем, тогда думаю ее можно удалить. Но все это на свой страх и риск.

Заключение

  • IsolatedStorage — директория, является изолированным хранилищем, где могут хранить данные некоторые установленные программы на компьютере.
  • Удалять эту папку думаю не стоит — могут быть проблемы при работе некоторого ПО.

Удачи и добра, до новых встреч друзья!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *