Windows Phone 8.1 資料處理

來源:互聯網
上載者:User

標籤:style   c   class   blog   code   java   

Windows Phone 8.1 應用的資料存放區位置包括:

  1. Installation Folder
  2. ApplicationData
  3. Credential Locker
  4. Known Folders
  5. SD Card
  6. File System
  7. Networks

附張圖:

 

(1)Installation Folder

Installation Folder 也就是開發人員在項目裡自己添加的檔案,只能進行讀操作

比如項目結構為:

要使用 Images 檔案夾裡的圖片,則可以在 XAML 中這樣寫:

<Image x:Name="image"        Source="/Images/螢幕(157).png"       Stretch="Uniform"/>

若要在 C# 代碼中使用,則要在檔案路徑前加 ms-appx:///

protected override void OnNavigatedTo(NavigationEventArgs e){    BitmapImage img = new BitmapImage(new Uri("ms-appx:///Images/螢幕(157).png"));    image.Source = img;}

注意:檔案的產生操作為內容

 

(2)ApplicationData

ApplicationData 也就是應用的隔離儲存區 (Isolated Storage),可自由進行讀寫操作,分為以下三個地區:

1)Local(Folder,Settings)

儲存在手機端,沒有儲存限制,更新應用時會保留,包括 Folder 和 Settings。

使用方法非常簡單:

StorageFolder folder = ApplicationData.Current.LocalFolder;ApplicationDataContainer settings = ApplicationData.Current.LocalSettings;

Folder 的操作也非常簡單,當然也可以通過 Stream 來操作,如下:

StorageFolder folder = ApplicationData.Current.LocalFolder;await folder.CreateFileAsync("some.txt");await folder.CreateFolderAsync("some");await folder.GetFileAsync("some.txt");await folder.GetFolderAsync("some");await folder.OpenStreamForReadAsync("some.txt");await folder.OpenStreamForWriteAsync("some.txt", CreationCollisionOption.FailIfExists);

而 Settings 是一個索引值對數組,用以儲存簡單資料,類型為 <string, Object>,因此在讀取資料時要對值進行拆箱:

ApplicationDataContainer settings = ApplicationData.Current.LocalSettings;settings.Values["some"] = "some";if( settings.Values.ContainsKey("some") ){    string some = (string)settings.Values["some"];}

 

2)Roaming(Folder,Settings) 

儲存在雲端 OneDrive 處,可以跨裝置使用,但是有 100Kb 的限制,也包括 Folder 和 Settings。

Roaming 資料的操作與 Local 的操作一致,需要注意的是那 100kb 的限制,以及當漫遊資料發生改變時會觸發的事件 DataChanged,比如可以在該事件中更新本機資料:

public MainPage(){    this.InitializeComponent();    ApplicationData.Current.DataChanged += Current_DataChanged;}private void Current_DataChanged(ApplicationData sender, object args){    if( localSettings.Values.ContainsKey("test") && roamingSettings.Values.ContainsKey("test") )    {        localSettings.Values["test"] = roamingSettings.Values["test"];    }}

注意:應用必須擷取了市集的認證才能使用數據漫遊。

 

3)Temp(Folder)

儲存在手機端的臨時資料,不能保證何時被刪除(如手機儲存空間不足時則自動刪除),只有 Folder。

使用方法與 Local 和 Roaming 一致,不同的事它是能使用 Folder。

 

除了以上的訪問 ApplicationData 的方法外,同樣的可以使用 Uri 的方式訪問上述各 Folder,只需在路徑前添加 ms-appdata:///:

var localFile = StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/some.txt"));var roamingFile = StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///roaming/some.txt"));var tempFile = StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///temp/some.txt"));

 

(3)Credential Locker

Credential Locak 是一個用來儲存使用者帳號與密碼對的一個私密空間,不會被其它應用訪問,同時還支援同應用的跨裝置漫遊。

使用方法:

private void saveButton_Click(object sender, RoutedEventArgs e){    string username = idTextBox.Text.Trim();    string password = passwordBox.Password.Trim();    PasswordCredential cred = new PasswordCredential("weibo", username, password);    PasswordVault value = new PasswordVault();    value.Add(cred);}private void loadButton_Click(object sender, RoutedEventArgs e){    PasswordVault value = new PasswordVault();    var creds = value.FindAllByResource("weibo");    if( creds.Count != 0 )    {        foreach( var cred in creds )        {            cred.RetrievePassword();            messageTextBlock.Text += string.Format("{0}\n{1}\n{2}\n", cred.Resource, cred.UserName, cred.Password);        }    }}

注意:在擷取密碼的時候必須先調用 RetrievePassword 方法,不然擷取的密碼為空白字串。

 

(4)Known Folders

Known Folders 也就是手機上特有的幾個檔案夾,比如音樂視頻檔案等。

擷取方法為:

StorageFolder DocumentsLibrary = KnownFolders.DocumentsLibrary;StorageFolder MusicLibrary = KnownFolders.MusicLibrary;StorageFolder VideosLibrary = KnownFolders.VideosLibrary;StorageFolder PicturesLibrary = KnownFolders.PicturesLibrary;StorageFolder CameraRoll = KnownFolders.CameraRoll;StorageFolder SavedPictures = KnownFolders.SavedPictures;StorageFolder RemovableDevices = KnownFolders.RemovableDevices;StorageFolder HomeGroup = KnownFolders.HomeGroup;StorageFolder MediaServerDevices = KnownFolders.MediaServerDevices;

以上是可擷取的所有 Known Folders,其中 HomeGroup 和 MediaServerDevices 檔案夾暫時還未開放。

注意:某些檔案夾的讀取需要在 appxmanifest 擷取許可權:

 

(5)SD Card

SD Card 的檔案讀取同樣需要在 appxmanifest 擷取許可權。

擷取方法為:

var devices = KnownFolders.RemovableDevices;var sdCards = await devices.GetFoldersAsync();if( sdCards.Count == 0 )    return;StorageFolder firstCard = sdCards[0];

要注意的是,對 SD Card 的檔案讀取需要事先在 appxmanifest 中增加檔案類型關聯,確定需要讀取的檔案類型:

 

(6)備忘

關於使用 FilePicker API 與 FileSystem 的操作,以及 Networks 的資料操作將在其它隨筆中說明。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.