Язык

ApplicationData Класс

Определение

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

public ref class ApplicationData sealed
public ref class ApplicationData sealed : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.MTA)]
class ApplicationData final
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.MTA)]
class ApplicationData final : IClosable
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.MTA)]
public sealed class ApplicationData
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.MTA)]
public sealed class ApplicationData : System.IDisposable
Public NotInheritable Class ApplicationData
Public NotInheritable Class ApplicationData
Implements IDisposable
Наследование
Object Platform::Object IInspectable ApplicationData
Атрибуты
Реализации

Требования к Windows

Требования Описание
Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (появилось в v1.0)

Примеры

В следующем примере кода показано, как считывать или записывать данные в папку ApplicationData по своему усмотрению. В этом примере используется LocalFolder, но код может быть немного изменен для доступа к LocalCacheFolder, RoamingFolder, SharedLocalFolder или TemporaryFolder в зависимости от способа хранения данных. SharedLocalFolder имеет некоторые ограничения и требует специальных разрешений для доступа, дополнительные сведения см. в разделе SharedLocalFolder.

// This example code can be used to read or write to an ApplicationData folder of your choice.

// Change this to Windows.Storage.StorageFolder roamingFolder = Windows.Storage.ApplicationData.Current.RoamingFolder;
// to use the RoamingFolder instead, for example.
Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

// Write data to a file
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(DateTime.Now));
}

// Read data from a file
async Task ReadTimestamp()
{
    try
    {
        StorageFile sampleFile = await localFolder.GetFileAsync("dataFile.txt");
        String timestamp = await FileIO.ReadTextAsync(sampleFile);
        // Data is contained in timestamp
    }
    catch (FileNotFoundException e)
    {
        // Cannot find file
    }
    catch (IOException e)
    {
        // Get information from the exception, then throw
        // the info to the parent method.
        if(e.Source != null)
        {
            Debug.WriteLine("IOException source: {0}", e.Source);
        }
        throw;
    }
}
#include <winrt/Windows.Globalization.h>
#include <winrt/Windows.Globalization.DateTimeFormatting.h>
#include <winrt/Windows.Storage.h>

using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Storage;
using namespace Windows::UI::Xaml;

// This example code can be used to read or write to an ApplicationData folder of your choice.

// Change this to StorageFolder m_localFolder{ Windows::Storage::ApplicationData::Current().RoamingFolder() }; to 
// use the RoamingFolder instead, for example.
StorageFolder m_localFolder{ Windows::Storage::ApplicationData::Current().LocalFolder() };

// Write data to a file.
IAsyncAction MainPage::WriteTimestampAsync()
{
    StorageFile sampleFile{ co_await m_localFolder.CreateFileAsync(L"dataFile.txt", CreationCollisionOption::ReplaceExisting) };
    Windows::Globalization::Calendar calendar;
    auto now = calendar.GetDateTime();
    Windows::Globalization::DateTimeFormatting::DateTimeFormatter formatter{ L"longtime" };

    try
    {
        co_await FileIO::WriteTextAsync(sampleFile, formatter.Format(now));
    }
    catch (winrt::hresult_error const& /* ex */)
    {
        // Timestamp not written.
    }
}

// Read data from a file.
IAsyncAction MainPage::ReadTimestampAsync()
{
    StorageFile file{ co_await m_localFolder.GetFileAsync(L"dataFile.txt") };

    try
    {
        winrt::hstring timestamp{ co_await Windows::Storage::FileIO::ReadTextAsync(file) };
    }
    catch (winrt::hresult_error const& /* ex */)
    {
        // Timestamp not read.
    }
}

IAsyncAction MainPage::ClickHandler(IInspectable const&, RoutedEventArgs const&)
{
    myButton().Content(box_value(L"Clicked"));

    co_await WriteTimestampAsync();
    co_await ReadTimestampAsync();
}
// This example code can be used to read or write to an ApplicationData folder of your choice.

// Change this to StorageFolder^ roamingFolder = ApplicationData::Current->RoamingFolder; to 
// use the RoamingFolder instead, for example.
StorageFolder^ localFolder = ApplicationData::Current->LocalFolder;

// Write data to a file
void MainPage::WriteTimestamp()
{
   concurrency::task<StorageFile^> fileOperation = 
       localFolder->CreateFileAsync("dataFile.txt", CreationCollisionOption::ReplaceExisting);
   fileOperation.then([this](StorageFile^ sampleFile)
   {
      auto calendar = ref new Calendar;
      auto now = calendar->ToDateTime();
      auto formatter = ref new Windows::Globalization::DateTimeFormatting::DateTimeFormatter("longtime");

      return FileIO::WriteTextAsync(sampleFile, formatter->Format(now));
   }).then([this](task<void> previousOperation) {
      try {
         previousOperation.get();
      } catch (Platform::Exception^) {
         // Timestamp not written
      }
   });
}

// Read data from a file
void MainPage::ReadTimestamp()
{
   concurrency::task<StorageFile^> getFileOperation(localFolder->GetFileAsync("dataFile.txt"));
   getFileOperation.then([this](StorageFile^ file)
   {
      return FileIO::ReadTextAsync(file);
   }).then([this](concurrency::task<String^> previousOperation) {
      String^ timestamp;

      try {
         // Data is contained in timestamp
         timestamp = previousOperation.get();
      } catch (...) {
         // Timestamp not found
      }
   });
}
' This example code can be used to read or write to an ApplicationData folder of your choice.

' Change this to Dim roamingFolder As Windows.Storage.StorageFolder = Windows.Storage.ApplicationData.Current.RoamingFolder
' to use the RoamingFolder instead, for example.
Dim localFolder As Windows.Storage.StorageFolder = Windows.Storage.ApplicationData.Current.LocalFolder

' Write data to a file
Private Async Sub WriteTimestamp()
   Dim formatter As DateTimeFormatter = New DateTimeFormatter("longtime")

   Dim sampleFile As StorageFile = Await localFolder.CreateFileAsync("dataFile.txt", 
       CreationCollisionOption.ReplaceExisting)
   Await FileIO.WriteTextAsync(sampleFile, formatter.Format(DateTime.Now));
End Sub

' Read data from a file
Private Async Function ReadTimestamp() As Task
   Try
      Dim sampleFile As StorageFile = Await localFolder.GetFileAsync("dataFile.txt")
      Dim timestamp As string = Await FileIO.ReadTextAsync(sampleFile)
      ' Data is contained in timestamp
   Catch e1 As Exception
      ' Timestamp not found
   End Try
End Function

Дополнительные примеры и сведения о чтении и записи в файл см. в разделе "Создание, запись и чтение файла".

Комментарии

Типы данных приложения

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

ApplicationData не предоставляет доступ к файлам в пакете приложения. Для этого используйте Windows. ApplicationModel.Package.InstalledLocation.

ApplicationData.Current предоставляет экземпляр ApplicationData приложения. Используйте этот экземпляр для получения папок или параметров приложения.

Папки используются для хранения данных приложения в виде файлов в файловой системе. Параметры приложения хранятся в парах "ключ-значение", которые могут быть организованы в вложенных наборах. Данные параметров сохраняются в реестре Windows.

Это основные типы данных приложения:

  • Local: хранящиеся на устройстве, резервные копии в облаке и сохраняемые в разных обновлениях
  • LocalCache: постоянные данные, которые существуют на текущем устройстве, а не резервные копии и сохраняются во время обновлений.
  • SharedLocal: постоянный для всех пользователей приложений
  • Роуминг: существует на всех устройствах, на которых пользователь установил приложение.
  • Временный: можно удалить системой в любое время

Использование папок приложения

LocalFolder сохраняется во время обновлений и выполняет резервное копирование в облако в рамках резервного копирования устройства. Как правило, эта папка должна использоваться для пользовательских данных, которые будут потеряны, если они не были резервными копиями. Ниже приведены некоторые примеры данных, хранящихся в LocalFolder :

  • Пользовательский рисунок для приложения art
  • журнал ежедневных упражнений для фитнес-приложения
  • список покупок для приложения todo

Сохраняя сведения в LocalFolder, пользователь не потеряет данные после сброса устройства или переключения на новое устройство. Для других типов локальных данных, которые легко воссоздать и не нужны для резервного копирования и восстановления, используйте LocalCacheFolder или TemporaryFolder.

LocalCacheFolder и TemporaryFolder хранятся локально и не резервируются в облаке. LocalCacheFolder контролирует это приложение и постоянно работает в сеансах приложений. LocalCacheFolder следует использовать для создания содержимого, необходимого для сеансов приложений, таких как кэшированные файлы, журналы или маркеры проверки подлинности. Временная папка не гарантирует постоянный доступ к сеансам и может быть удалена системой в любое время.

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

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

Данные приложения можно хранить в форматах, предназначенных для конкретного приложения. Дополнительные сведения см. в разделе Version and SetVersionAsync.

Дополнительные сведения об использовании этих API см. в разделе "Магазин" и получение параметров и других данных приложения.

Свойства

Имя. Описание
Current

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

LocalCacheFolder

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

LocalFolder

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

LocalSettings

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

RoamingFolder

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

RoamingSettings

Возвращает контейнер параметров приложения в перемещаемом хранилище данных приложения.

RoamingStorageQuota

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

SharedLocalFolder

Возвращает корневую папку в общем хранилище данных приложения.

TemporaryFolder

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

Version

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

Методы

Имя. Описание
ClearAsync()

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

Примечание.

Метод ClearAsync() обнаруживает ошибку, если есть открытые дескрипторы файлов. Перед вызовом ClearAsync необходимо закрыть все открытые файлы.

ClearAsync(ApplicationDataLocality)

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

Примечание.

Метод ClearAsync(ApplicationDataLocality) обнаруживает ошибку, если есть открытые дескрипторы файлов. Перед вызовом ClearAsync необходимо закрыть все открытые файлы.

ClearPublisherCacheFolderAsync(String)

Очищает файлы и вложенные папки из указанной вложенной папки общего хранилища для издателя текущего приложения.

Close()

Примечание.

Этот элемент не реализован в C#.

Dispose()

Выполняет определяемые приложением задачи, связанные с освобождением, освобождением или сбросом неуправляемых ресурсов.

GetForUserAsync(User)

Статический метод, возвращающий ApplicationData для пользователя.

GetPublisherCacheFolder(String)

Возвращает указанную вложенную папку общего хранилища для издателя текущего приложения.

SetVersionAsync(UInt32, ApplicationDataSetVersionHandler)

Задает номер версии данных приложения в хранилище данных приложения.

SignalDataChanged()

Отправляет событие DataChanged всем зарегистрированным обработчикам событий.

События

Имя. Описание
DataChanged

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

Применяется к

См. также