Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
API ApplicationData, описанные в этой статье, предназначены для упакованных приложений. Непакованные приложения не имеют доступа к хранилищам данных, управляемым системой, и должны использовать альтернативные механизмы хранения, такие как прямой доступ к файлу ввода-вывода или реестру.
Данные приложения — это изменяемые данные, созданные и управляемые определенным приложением. Она включает состояние среды выполнения, параметры приложения, настройки пользователя, справочные материалы (например, определения словаря в приложении словаря) и другие параметры. Данные приложения отличаются от пользовательских данных, данных, которые пользователь создает и управляет при использовании приложения. Данные пользователя включают файлы документов или мультимедиа, расшифровки сообщений электронной почты или записи базы данных, которые содержат содержимое, созданное пользователем. Пользовательские данные могут быть полезными или значимыми для нескольких приложений. Часто это данные, которые пользователь хочет управлять или передавать как сущность независимо от самого приложения, например документа.
Важно отметить данные приложения: Время существования данных приложения привязано к времени существования приложения. Если приложение удалено, все данные приложения будут потеряны в результате. Не используйте данные приложения для хранения пользовательских данных или каких-либо данных, которые пользователи могут воспринимать как ценные и незаменимые. Мы рекомендуем использовать библиотеки и Microsoft OneDrive пользователя для хранения таких сведений. Данные приложения идеально подходят для хранения специфических для приложения предпочтений пользователя, настроек и избранного.
Типы данных приложения
Существует два типа данных приложения: параметры и файлы.
Settings
Используйте параметры для хранения параметров пользователя и сведений о состоянии приложения. API данных приложения позволяет легко создавать и извлекать параметры (мы рассмотрим некоторые примеры далее в этой статье).
Ниже приведены типы данных, которые можно использовать для параметров приложения:
- UInt8, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double
- Boolean
- Char16, String
-
DateTime, TimeSpan
- Для C#/.NET используйте: System.DateTimeOffset, System.TimeSpan
GUID ,Point ,Size Rect - ApplicationDataCompositeValue: набор связанных параметров приложения, которые должны быть сериализованы и десериализованы атомарно. Используйте составные настройки, чтобы легко обрабатывать атомарные обновления взаимозависимых настроек. Система обеспечивает целостность составных параметров во время параллельного доступа и перемещения. Составные параметры оптимизированы для небольших объемов данных, и производительность может быть плохой, если они используются для больших наборов данных.
Файлы
Используйте файлы для хранения двоичных данных или включения собственных настраиваемых сериализованных типов.
Хранение данных приложения в хранилищах данных приложения
Когда приложение установлено, система предоставляет ему собственные хранилища данных для пользовательских параметров и файлов. Вам не нужно знать, где или как эти данные существуют, так как система отвечает за управление физическим хранилищем, обеспечивая изоляцию данных от других приложений и других пользователей. Система также сохраняет содержимое этих хранилищ данных, когда пользователь устанавливает обновление для приложения, и удаляет содержимое этих хранилищ данных полностью и аккуратно при удалении приложения.
В хранилище данных приложения каждое приложение имеет системные корневые каталоги: один для локальных файлов, один для перемещаемых файлов и один для временных файлов. Приложение может добавлять новые файлы и новые контейнеры в каждый из этих корневых каталогов.
Данные локального приложения
Данные локального приложения должны использоваться для любых сведений, которые необходимо сохранить между сеансами приложений и не подходят для перемещаемых данных приложения. Данные, которые не применимы на других устройствах, также должны храниться здесь. Нет общего ограничения размера для локальных данных, хранящихся. Используйте локальное хранилище данных приложения для данных, которые не имеет смысла переносить, а также для больших наборов данных.
Получение локального хранилища данных приложения
Прежде чем считывать или записывать данные локального приложения, необходимо получить локальное хранилище данных приложения. Чтобы получить локальное хранилище данных приложения, используйте свойство ApplicationData.LocalSettings для получения локальных параметров приложения в качестве объекта ApplicationDataContainer. Используйте свойство ApplicationData.LocalFolder> для получения файлов в объекте StorageFolder. Используйте свойство ApplicationData.LocalCacheFolder , чтобы получить папку в локальном хранилище данных приложения, где можно сохранить файлы, которые не включены в резервное копирование и восстановление.
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder =
Windows.Storage.ApplicationData.Current.LocalFolder;
Создание и извлечение простого локального параметра
Чтобы создать или записать параметр, используйте свойство ApplicationDataContainer.Values для доступа к параметрам в контейнере localSettings , который мы получили на предыдущем шаге. В этом примере создается параметр с именем exampleSetting.
// Simple setting
localSettings.Values["exampleSetting"] = "Hello Windows";
Чтобы получить этот параметр, используйте то же свойство ApplicationDataContainer.Values , которое использовалось для создания параметра. В этом примере показано, как получить только что созданный параметр.
// Simple setting
Object value = localSettings.Values["exampleSetting"];
Создание и получение локального составного значения
Чтобы создать или записать составное значение, создайте объект ApplicationDataCompositeValue. В этом примере создается составной параметр с именем exampleCompositeSetting и добавляется в localSettings контейнер.
// Composite setting
Windows.Storage.ApplicationDataCompositeValue composite =
new Windows.Storage.ApplicationDataCompositeValue();
composite["intVal"] = 1;
composite["strVal"] = "string";
localSettings.Values["exampleCompositeSetting"] = composite;
В этом примере показано, как получить только что созданное составное значение.
// Composite setting
Windows.Storage.ApplicationDataCompositeValue composite =
(Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["exampleCompositeSetting"];
if (composite == null)
{
// No data
}
else
{
// Access data in composite["intVal"] and composite["strVal"]
}
Создание и чтение локального файла
Чтобы создать и обновить файл в локальном хранилище данных приложения, используйте API-интерфейсы файлов, например Windows. Storage.StorageFolder.CreateFileAsync и Windows. Storage.FileIO.WriteTextAsync. В этом примере создается файл с именем dataFile.txt в контейнере localFolder и записывается текущая дата и время в файл. Значение ReplaceExisting из перечисления CreationCollisionOption указывает, чтобы заменить файл, если он уже существует.
async void WriteTimestamp()
{
Windows.Globalization.DateTimeFormatting.DateTimeFormatter formatter =
new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longtime");
StorageFile sampleFile = await localFolder.CreateFileAsync("dataFile.txt",
CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(sampleFile, formatter.Format(DateTimeOffset.Now));
}
Чтобы открыть и прочитать файл в локальном хранилище данных приложения, используйте API-интерфейсы файлов, например Windows. Storage.StorageFolder.GetFileAsync, Windows. Storage.StorageFile.GetFileFromApplicationUriAsync и Windows. Storage.FileIO.ReadTextAsync. В этом примере открывается файл dataFile.txt, созданный на предыдущем шаге, и из него считывается дата. Дополнительные сведения о загрузке файлового ресурса из различных расположений см. в разделе "Загрузка файлового ресурса".
async void ReadTimestamp()
{
try
{
StorageFile sampleFile = await localFolder.GetFileAsync("dataFile.txt");
String timestamp = await FileIO.ReadTextAsync(sampleFile);
// Data is contained in timestamp
}
catch (Exception)
{
// Timestamp not found
}
}
Перемещаемые данные
Предупреждение
Перемещаемые данные и параметры больше не поддерживаются, начиная с Windows 11. Рекомендуемая замена — Служба приложений Azure. Служба приложений Azure широко поддерживается, хорошо документирована, надежна и поддерживает кроссплатформенные и кросс-экосистемные сценарии, такие как iOS, Android и Интернет.
Временные данные приложения
Временное хранилище данных приложения работает как кэш. Его файлы не перемещаются и могут быть удалены в любое время. Задача обслуживания системы может автоматически удалять данные, хранящиеся в этом расположении в любое время. Пользователь также может очистить файлы из временного хранилища данных с помощью очистки диска. Временные данные приложения можно использовать для хранения временных сведений во время сеанса приложения. Нет никаких гарантий, что эти данные будут сохраняться после окончания сеанса приложения, так как система может освободить используемое пространство при необходимости. Расположение доступно с помощью свойства temporaryFolder.
Получите временный контейнер данных
Используйте свойство ApplicationData.TemporaryFolder для получения файлов. Следующие шаги используют temporaryFolder переменную из этого шага.
Windows.Storage.StorageFolder temporaryFolder = ApplicationData.Current.TemporaryFolder;
Создание и чтение временных файлов
Чтобы создать и обновить файл во временном хранилище данных приложения, используйте API-интерфейсы файлов, например Windows. Storage.StorageFolder.CreateFileAsync и Windows. Storage.FileIO.WriteTextAsync. В этом примере создается файл с именем dataFile.txt в контейнере temporaryFolder и записывается текущая дата и время в файл. Значение ReplaceExisting из перечисления CreationCollisionOption указывает, чтобы заменить файл, если он уже существует.
async void WriteTimestamp()
{
Windows.Globalization.DateTimeFormatting.DateTimeFormatter formatter =
new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longtime");
StorageFile sampleFile = await temporaryFolder.CreateFileAsync("dataFile.txt",
CreateCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(sampleFile, formatter.Format(DateTimeOffset.Now));
}
Чтобы открыть и прочитать файл во временном хранилище данных приложения, используйте API-интерфейсы файлов, например Windows. Storage.StorageFolder.GetFileAsync, Windows. Storage.StorageFile.GetFileFromApplicationUriAsync и Windows. Storage.FileIO.ReadTextAsync. В этом примере открывается файл dataFile.txt, созданный на предыдущем шаге, и из него считывается дата. Дополнительные сведения о загрузке файлового ресурса из различных расположений см. в разделе "Загрузка файлового ресурса".
async void ReadTimestamp()
{
try
{
StorageFile sampleFile = await temporaryFolder.GetFileAsync("dataFile.txt");
String timestamp = await FileIO.ReadTextAsync(sampleFile);
// Data is contained in timestamp
}
catch (Exception)
{
// Timestamp not found
}
}
Упорядочение данных приложения с помощью контейнеров
Для организации параметров и файлов данных приложения можно создавать контейнеры (представленные объектами ApplicationDataContainer) вместо работы непосредственно с каталогами. Контейнеры можно добавлять в локальные, перемещаемые и временные хранилища данных приложения. Контейнеры можно вложить до 32 уровней глубоко.
Чтобы создать контейнер параметров, вызовите метод ApplicationDataContainer.CreateContainer . В этом примере создается локальный контейнер параметров с именем exampleContainer и добавляется параметр с именем exampleSetting. Значение Always из перечисления ApplicationDataCreateDisposition указывает, что контейнер создается, если он еще не существует.
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder =
Windows.Storage.ApplicationData.Current.LocalFolder;
// Setting in a container
Windows.Storage.ApplicationDataContainer container =
localSettings.CreateContainer("exampleContainer", Windows.Storage.ApplicationDataCreateDisposition.Always);
if (localSettings.Containers.ContainsKey("exampleContainer"))
{
localSettings.Containers["exampleContainer"].Values["exampleSetting"] = "Hello Windows";
}
Удаление параметров и контейнеров приложений
Чтобы удалить простой параметр, который приложение больше не требуется, используйте метод ApplicationDataContainerSettings.Remove . В этом примере удаляется локальный exampleSetting параметр, созданный ранее.
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder =
Windows.Storage.ApplicationData.Current.LocalFolder;
// Delete simple setting
localSettings.Values.Remove("exampleSetting");
Чтобы удалить составной параметр, используйте метод ApplicationDataCompositeValue.Remove . В этом примере удаляется локальный exampleCompositeSetting составной параметр, созданный в предыдущем примере.
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder =
Windows.Storage.ApplicationData.Current.LocalFolder;
// Delete composite setting
localSettings.Values.Remove("exampleCompositeSetting");
Чтобы удалить контейнер, вызовите метод ApplicationDataContainer.DeleteContainer . В этом примере удаляется созданный ранее контейнер локальных exampleContainer параметров.
Windows.Storage.ApplicationDataContainer localSettings =
Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.StorageFolder localFolder =
Windows.Storage.ApplicationData.Current.LocalFolder;
// Delete container
localSettings.DeleteContainer("exampleContainer");
Управление версиями данных приложения
Вы можете, при необходимости, версионировать данные вашего приложения. Это позволит создать будущую версию приложения, которая изменяет формат данных приложения без возникновения проблем совместимости с предыдущей версией приложения. Приложение проверяет версию данных приложения в хранилище данных, а если версия меньше версии, ожидаемой приложением, приложение должно обновить данные приложения до нового формата и обновить версию. Дополнительные сведения см. в свойствеApplication.Version и методе ApplicationData.SetVersionAsync .
Связанные статьи
Windows developer