Language: HTML | XAML

快速入門:本機應用程式資料 (XAML)

了解如何從本機應用程式資料存放區儲存與抓取設定和檔案。

藍圖: 這個主題與其他主題的相關性?請參閱:

取得應用程式各項設定和檔案的容器

使用 ApplicationData.LocalSettings 屬性來取得 ApplicationDataContainer 物件中的設定。使用 ApplicationData.LocalFolder 屬性來取得 StorageFolder 物件中的檔案。


ApplicationDataContainer^ localSettings = ApplicationData::Current->LocalSettings;
StorageFolder^ localFolder = ApplicationData::Current->LocalFolder;

下一節會使用本節的 localSettingslocalFolder 變數。

將資料寫入設定

使用 ApplicationDataContainer.Values 屬性來存取上一個步驟中取得之 localSettings 容器的設定。這個範例會建立名為 exampleSetting 的設定。


// Simple setting

auto values = localSettings->Values;
values->Insert("exampleSetting", dynamic_cast<PropertyValue^>(PropertyValue::CreateString("Hello Windows")));

ApplicationDataCompositeValue 物件包含的設定,在存取時不可分開進行。這個範例會建立名為 exampleCompositeSetting 的複合設定,然後將它新增到 localSettings 容器。


// Composite setting

ApplicationDataCompositeValue^ composite = ref new ApplicationDataCompositeValue();
composite->Insert("intVal", dynamic_cast<PropertyValue^>(PropertyValue::CreateInt32(1)));
composite->Insert("strVal", dynamic_cast<PropertyValue^>(PropertyValue::CreateString("string")));

auto values = localSettings->Values;
values->Insert("exampleCompositeSetting", composite);

呼叫 ApplicationDataContainer.CreateContainer 方法來建立設定容器。這個範例會建立名為 exampleContainer 的設定容器,然後新增名為 exampleSetting 的設定。來自 ApplicationDataCreateDisposition 列舉的 Always 值,指出如果還沒有容器,就會建立一個容器。


// Setting in a container

ApplicationDataContainer^ container = 
   localSettings->CreateContainer("exampleContainer", ApplicationDataCreateDisposition::Always);

if (localSettings->Containers->HasKey("exampleContainer"))
{
   auto values = localSettings->Containers->Lookup("exampleContainer")->Values;
   values->Insert("exampleSetting", "Hello Windows");
}

從設定讀取資料

使用 ApplicationDataContainer.Values 屬性來取得 localSettings 容器中的 exampleSetting 設定。


// Simple setting

auto values = localSettings->Values;
String^ value = safe_cast<String^>(localSettings->Values->Lookup("exampleSetting"));

使用 ApplicationDataContainer.Values 屬性來取得 localSettings 容器中的 exampleCompositeSetting 設定。


// Composite setting

ApplicationDataCompositeValue^ composite = 
   safe_cast<ApplicationDataCompositeValue^>(localSettings->Values->Lookup("exampleCompositeSetting"));

if (composite == nullptr)
{
   // No data
}
else
{
   int one = safe_cast<IPropertyValue^>(composite->Lookup("intVal"))->GetInt32();
   String^ hello = safe_cast<String^>(composite->Lookup("strVal"));
}

使用 ApplicationDataContainer.Values 屬性來取得 exampleContainer 容器中的 exampleSetting 設定。


// Setting in a container

bool hasContainer = localSettings->Containers->HasKey("exampleContainer");
bool hasSetting = false;

if (hasContainer)
{
   auto values = localSettings->Containers->Lookup("exampleContainer")->Values;
   hasSetting = values->HasKey("exampleSetting");
}

將資料寫入檔案

使用檔案 API,例如 Windows.Storage.StorageFolder.CreateFileAsyncWindows.Storage.FileIO.WriteTextAsync,在本機應用程式資料存放區中建立和更新檔案。這個範例會在 localFolder 容器中建立名為 dataFile.txt 的檔案,然後在這個檔案中寫入目前的日期與時間。來自 CreationCollisionOption 列舉的 ReplaceExisting 值,指出檔案如果已經存在,就會取代它。

注意  針對 Windows Phone 市集應用程式,預設會備份應用程式資料。如果您不想備份檔案,可以將它儲存於應用程式本機存放區的 LocalCache 子資料夾中。


void MainPage::WriteTimestamp()
{
   concurrency::task<StorageFile^> fileOperation = 
       localFolder->CreateFileAsync("dataFile.txt", CreateCollisionOption::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
      }
   });
}

從檔案讀取資料

使用檔案 API,例如 Windows.Storage.StorageFolder.GetFileAsyncWindows.Storage.StorageFile.GetFileFromApplicationUriAsyncWindows.Storage.FileIO.ReadTextAsync,在本機應用程式資料存放區中開啟和讀取檔案。這個範例會開啟上一個步驟中建立的 dataFile.txt 檔案,然後讀取該檔案的日期。如需從各種位置載入檔案資源的詳細資料,請參閱如何載入檔案資源


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
      }
   });
}

當設定不再需要時將其刪除

當您不再需要 exampleSetting 設定時,呼叫 ApplicationDataContainerSettings.Remove 方法將其刪除。


// Delete simple setting

auto values = localSettings->Values;
values->Remove("exampleSetting");

當您不再需要 exampleCompositeSetting 複合設定時,呼叫 ApplicationDataCompositeValue.Remove 方法將其刪除。


// Delete composite setting

auto values = localSettings->Values;
values->Remove("exampleCompositeSetting");

當您不再需要 exampleContainer 設定容器時,呼叫 ApplicationDataContainer.DeleteContainer 方法將其刪除。


// Delete container

localSettings->DeleteContainer("exampleContainer");

相關主題

工作
如何載入檔案資源
快速入門:應用程式資料漫遊
快速入門:暫時的應用程式資料
概念
使用 Windows 執行階段存取應用程式資料
參考
Windows.Storage.ApplicationData
Windows.Storage.ApplicationDataCompositeValue
Windows.Storage.ApplicationDataContainer
Windows.Storage.ApplicationDataContainerSettings
範例
應用程式資料範例

 

 

顯示:
© 2015 Microsoft