Lingua

ApplicationData Classe

Definizione

Fornisce l'accesso all'archivio dati dell'applicazione. I dati dell'applicazione sono costituiti da file e impostazioni locali, mobili o temporanei.

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
Ereditarietà
Object Platform::Object IInspectable ApplicationData
Attributi
Implementazioni

Requisiti Windows

Requisiti Descrizione
Famiglia di dispositivi
Windows 10 (è stato introdotto in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (è stato introdotto in v1.0)

Esempio

Nell'esempio di codice seguente viene illustrato come leggere o scrivere in una cartella ApplicationData di propria scelta. Questo esempio usa LocalFolder, ma il codice può essere leggermente modificato per accedere a LocalCacheFolder, RoamingFolder, SharedLocalFolder o TemporaryFolder in base alla modalità di archiviazione dei dati. SharedLocalFolder presenta alcune restrizioni e richiede autorizzazioni speciali per accedere. Per altre informazioni, vedere 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

Per altri esempi e informazioni sulla lettura e la scrittura in un file, vedere Creare, scrivere e leggere un file.

Commenti

Tipi di dati dell'applicazione

ApplicationData fornisce risorse di archiviazione locali, mobili e temporanee per i dati dell'app in base all'utente. Usare questa classe per mantenere i dati specifici dell'app tra sessioni, utenti e tra più dispositivi.

ApplicationData non fornisce l'accesso ai file in un pacchetto dell'app. A tale scopo, usare Windows. ApplicationModel.Package.InstalledLocation.

ApplicationData.Current offre l'istanza ApplicationData dell'app. Usare questa istanza per ottenere le cartelle o le impostazioni dell'app.

Le cartelle vengono usate per archiviare i dati dell'app come file nel file system. Le impostazioni dell'app vengono archiviate in coppie chiave/valore che possono essere organizzate in in set annidati. I dati delle impostazioni vengono salvati nel registro di Windows.

Questi sono i tipi principali di dati dell'app:

  • Locale: archiviato nel dispositivo, sottoposto a backup nel cloud e persistente tra gli aggiornamenti
  • LocalCache: dati persistenti presenti nel dispositivo corrente, non sottoposti a backup e persistenti tra gli aggiornamenti
  • SharedLocal: persistente in tutti gli utenti dell'app
  • Roaming: esiste in tutti i dispositivi in cui l'utente ha installato l'app
  • Temporaneo: può essere eliminato dal sistema in qualsiasi momento

Uso delle cartelle dell'applicazione

LocalFolder viene salvato in modo permanente tra gli aggiornamenti e viene eseguito il backup nel cloud come parte del backup del dispositivo. In genere, questa cartella deve essere usata per i dati utente che andrebbero persi se non fosse stato eseguito il backup. Alcuni esempi di dati archiviati in LocalFolder sono:

  • un disegno utente per un'app grafica
  • cronologia degli esercizi giornalieri per un'app di fitness
  • una lista acquisti per un'app todo

Archiviando le informazioni in LocalFolder, l'utente non perderà i dati dopo la reimpostazione del dispositivo o il passaggio a un nuovo dispositivo. Per altri tipi di dati locali facili da ricreare e non necessari per il backup e il ripristino, usare LocalCacheFolder o TemporaryFolder.

LocalCacheFolder e TemporaryFolder vengono archiviati in locale e non vengono sottoposti a backup nel cloud. LocalCacheFolder è sotto il controllo dell'app ed è persistente tra le sessioni dell'app. LocalCacheFolder deve essere usato per il contenuto generato necessario nelle sessioni dell'app, ad esempio file memorizzati nella cache, log o token di autenticazione. TemporaryFolder non è garantito che sia persistente tra le sessioni e possa essere eliminato dal sistema in qualsiasi momento.

RoamingFolder viene in genere usato per le preferenze e le personalizzazioni dell'utente, i collegamenti e i file di dati di piccole dimensioni. Il contenuto di RoamingFolder esegue il roaming tra i dispositivi e le istanze dell'app dell'utente. RoamingFolder non deve essere usato per grandi quantità di dati, dati specifici di un dispositivo o dati basati sulla sincronizzazione immediata.

Un'altra cartella , SharedLocalFolder, è persistente tra gli account utente dell'app e deve essere usata per file di grandi dimensioni a cui accedono più utenti. Per accedere a SharedLocalFolder sono necessarie alcune impostazioni aggiuntive. Per altre informazioni sull'accesso e l'uso di questa cartella, vedere SharedLocalFolder.

È possibile archiviare i dati dell'app in formati specifici dell'app con versione. Per altre info, vedi Versione e SetVersionAsync.

Per altri dettagli sull'uso di queste API, vedi Archiviare e recuperare le impostazioni e altri dati dell'app.

Proprietà

Nome Descrizione
Current

Fornisce l'accesso all'archivio dati dell'app associato al pacchetto dell'app.

LocalCacheFolder

Ottiene la cartella nell'archivio dati dell'app locale in cui è possibile salvare i file non inclusi nel backup e nel ripristino.

LocalFolder

Ottiene la cartella radice nell'archivio dati dell'app locale. Viene eseguito il backup di questa cartella nel cloud.

LocalSettings

Ottiene il contenitore delle impostazioni dell'applicazione nell'archivio dati dell'app locale.

RoamingFolder

Ottiene la cartella radice nell'archivio dati dell'app mobile.

RoamingSettings

Ottiene il contenitore delle impostazioni dell'applicazione nell'archivio dati dell'app mobile.

RoamingStorageQuota

Ottiene le dimensioni massime dei dati che possono essere sincronizzati con il cloud dall'archivio dati delle app mobili.

SharedLocalFolder

Ottiene la cartella radice nell'archivio dati dell'app condivisa.

TemporaryFolder

Ottiene la cartella radice nell'archivio dati temporaneo dell'app.

Version

Ottiene il numero di versione dei dati dell'applicazione nell'archivio dati dell'app.

Metodi

Nome Descrizione
ClearAsync()

Rimuove tutti i dati dell'applicazione dagli archivi dati locali, mobili e temporanei dell'app.

Annotazioni

Il metodo ClearAsync() rileva un errore se sono presenti handle di file aperti. È consigliabile chiudere tutti i file aperti prima di chiamare ClearAsync.

ClearAsync(ApplicationDataLocality)

Rimuove tutti i dati dell'applicazione dall'archivio dati dell'app specificato.

Annotazioni

Il metodo ClearAsync(ApplicationDataLocality) rileva un errore se sono presenti handle di file aperti. È consigliabile chiudere tutti i file aperti prima di chiamare ClearAsync.

ClearPublisherCacheFolderAsync(String)

Cancella i file e le sottocartelle dalla sottocartella specificata della cartella di archiviazione condivisa per l'editore dell'app corrente.

Close()

Annotazioni

Questo membro non è implementato in C#.

Dispose()

Esegue attività definite dall'applicazione associate alla liberazione, al rilascio o alla reimpostazione di risorse non gestite.

GetForUserAsync(User)

Metodo statico che restituisce ApplicationData per un utente.

GetPublisherCacheFolder(String)

Ottiene la sottocartella specificata della cartella di archiviazione condivisa per l'autore dell'app corrente.

SetVersionAsync(UInt32, ApplicationDataSetVersionHandler)

Imposta il numero di versione dei dati dell'applicazione nell'archivio dati dell'app.

SignalDataChanged()

Invia un evento DataChanged a tutti i gestori eventi registrati.

Eventi

Nome Descrizione
DataChanged

Si verifica quando i dati dell'applicazione mobili vengono sincronizzati.

Si applica a

Vedi anche