ApplicationData Clase

Definición

Proporciona acceso al almacén de datos de la aplicación. Los datos de la aplicación constan de archivos y configuraciones que son locales, móviles o temporales.

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
Herencia
Object Platform::Object IInspectable ApplicationData
Atributos
Implementaciones

Requisitos de Windows

Familia de dispositivos
Windows 10 (se introdujo en la versión 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (se introdujo en la versión v1.0)

Ejemplos

En el ejemplo de código siguiente se muestra cómo leer o escribir en una carpeta ApplicationData de su elección. En este ejemplo se usa LocalFolder, pero el código se puede modificar ligeramente para tener acceso a LocalCacheFolder, RoamingFolder, SharedLocalFolder o TemporaryFolder en función de cómo se deben almacenar los datos. SharedLocalFolder tiene algunas restricciones y necesita permisos especiales para acceder, para obtener más información, consulte 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

Para obtener más ejemplos e información sobre cómo leer y escribir en un archivo, vea Crear, escribir y leer un archivo.

Comentarios

Tipos de datos de aplicación

ApplicationData proporciona almacenamiento local, móvil y temporal para los datos de la aplicación por usuario. Use esta clase para conservar los datos específicos de la aplicación entre sesiones, usuarios y en varios dispositivos.

ApplicationData no proporciona acceso a los archivos de un paquete de aplicación. Para ello, use Windows.ApplicationModel.Package.InstalledLocation.

ApplicationData.Current proporciona la instancia applicationData de la aplicación. Use esta instancia para obtener las carpetas o la configuración de la aplicación.

Las carpetas se usan para almacenar los datos de la aplicación como archivos en el sistema de archivos. La configuración de la aplicación se almacena en pares clave-valor que se pueden organizar en conjuntos anidados. Los datos de configuración se guardan en el Registro de Windows.

Estos son los tipos principales de datos de la aplicación:

  • Local: se almacena en el dispositivo, se realiza una copia de seguridad en la nube y se conserva en todas las actualizaciones.
  • LocalCache: datos persistentes que existen en el dispositivo actual, no se realiza una copia de seguridad y se conservan entre las actualizaciones.
  • SharedLocal: persistente en todos los usuarios de la aplicación
  • Itinerancia: existe en todos los dispositivos en los que el usuario ha instalado la aplicación
  • Temporal: el sistema puede eliminarlo en cualquier momento.

Uso de carpetas de aplicación

LocalFolder persiste en las actualizaciones y se realiza una copia de seguridad en la nube como parte de la copia de seguridad del dispositivo. Normalmente, esta carpeta se debe usar para los datos de usuario que se perderían si no se hacía una copia de seguridad. Algunos ejemplos de datos almacenados en LocalFolder son:

  • un usuario dibujando para una aplicación de arte
  • historial diario de ejercicios para una aplicación de fitness
  • una lista de compras para una aplicación de tareas pendientes Almacenando información en LocalFolder, el usuario no perderá datos después de restablecer el dispositivo o cambiar a un nuevo dispositivo. Para otros tipos de datos locales que son fáciles de volver a crear y no son necesarios para la copia de seguridad y restauración, use LocalCacheFolder o TemporaryFolder.

LocalCacheFolder y TemporaryFolder se almacenan localmente y no se realizan copias de seguridad en la nube. LocalCacheFolder está bajo control de esa aplicación y es persistente en las sesiones de la aplicación. LocalCacheFolder debe usarse para el contenido generado necesario en las sesiones de la aplicación, como archivos almacenados en caché, registros o tokens de autenticación. TemporaryFolder no se garantiza que sea persistente entre sesiones y el sistema puede eliminarlo en cualquier momento.

RoamingFolder se usa normalmente para preferencias de usuario y personalizaciones, vínculos y archivos de datos pequeños. El contenido de RoamingFolder roamer entre los dispositivos del usuario y las instancias de la aplicación. RoamingFolder no debe usarse para grandes cantidades de datos, datos específicos de un dispositivo o datos que se basan en la sincronización instantánea.

Otra carpeta, SharedLocalFolder, es persistente en las cuentas de usuario de la aplicación y se debe usar para archivos de gran tamaño a los que acceden varios usuarios. Se requiere una configuración adicional para acceder a SharedLocalFolder. Para obtener más información sobre el acceso y el uso de esta carpeta, vea SharedLocalFolder.

Puede almacenar los datos de la aplicación en formatos con versiones específicas de la aplicación. Para obtener más información, consulta Version y SetVersionAsync.

Para obtener más información sobre el uso de estas API, consulta Almacenar y recuperar la configuración y otros datos de la aplicación.

Propiedades

Current

Proporciona acceso al almacén de datos de la aplicación asociado al paquete de la aplicación.

LocalCacheFolder

Obtiene la carpeta del almacén de datos de la aplicación local donde puede guardar archivos que no se incluyen en la copia de seguridad y restauración.

LocalFolder

Obtiene la carpeta raíz del almacén de datos de la aplicación local. Se realiza una copia de seguridad de esta carpeta en la nube.

LocalSettings

Obtiene el contenedor de configuración de la aplicación en el almacén de datos de la aplicación local.

RoamingFolder

Obtiene la carpeta raíz del almacén de datos de la aplicación móvil.

RoamingSettings

Obtiene el contenedor de configuración de la aplicación en el almacén de datos de la aplicación móvil.

RoamingStorageQuota

Obtiene el tamaño máximo de los datos que se pueden sincronizar con la nube desde el almacén de datos de la aplicación móvil.

SharedLocalFolder

Obtiene la carpeta raíz del almacén de datos de la aplicación compartida.

TemporaryFolder

Obtiene la carpeta raíz del almacén de datos de la aplicación temporal.

Version

Obtiene el número de versión de los datos de la aplicación en el almacén de datos de la aplicación.

Métodos

ClearAsync()

Quita todos los datos de la aplicación de los almacenes de datos de aplicaciones locales, móviles y temporales.

Nota

El método ClearAsync() encuentra un error si hay algún identificador de archivo abierto. Debe tener cuidado de cerrar todos los archivos abiertos antes de llamar a ClearAsync.

ClearAsync(ApplicationDataLocality)

Quita todos los datos de la aplicación del almacén de datos de la aplicación especificado.

Nota

El método ClearAsync(ApplicationDataLocality) encuentra un error si hay algún identificador de archivo abierto. Debe tener cuidado de cerrar todos los archivos abiertos antes de llamar a ClearAsync.

ClearPublisherCacheFolderAsync(String)

Borra los archivos y subcarpetas de la subcarpeta especificada de la carpeta de almacenamiento compartido para el publicador de la aplicación actual.

Close()

Nota

Este miembro no se implementa en C#.

Dispose()

Realiza tareas definidas por la aplicación asociadas a la liberación o al restablecimiento de recursos no administrados.

GetForUserAsync(User)

Método estático que devuelve ApplicationData para un usuario.

GetPublisherCacheFolder(String)

Obtiene la subcarpeta especificada de la carpeta de almacenamiento compartido para el publicador de la aplicación actual.

SetVersionAsync(UInt32, ApplicationDataSetVersionHandler)

Establece el número de versión de los datos de la aplicación en el almacén de datos de la aplicación.

SignalDataChanged()

Envía un evento DataChanged a todos los controladores de eventos registrados.

Eventos

DataChanged

Se produce cuando se sincronizan los datos de la aplicación móvil.

Se aplica a

Consulte también