博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Phone 8.1 数据处理
阅读量:6863 次
发布时间:2019-06-26

本文共 4383 字,大约阅读时间需要 14 分钟。

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 中这样写:

若要在 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 也就是应用的独立存储,可自由进行读写操作,分为以下三个区域:

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)备注

关于使用 ,以及 Networks 的数据操作将在其它随笔中说明。

转载于:https://www.cnblogs.com/xiaoshi3003/p/3754571.html

你可能感兴趣的文章
五笔反查工具
查看>>
python 类的继承
查看>>
python 爬取<a>标签内href的方法及遇到的问题
查看>>
.Net 环境下比较各种数据库插入操作的性能
查看>>
凸函数的形式
查看>>
参数 题外记录“ { int.Parse(string); 也可以将一个字符串类型转成INT类型}”
查看>>
CSS: rem
查看>>
驰骋工作流引擎-流程数据md5加密
查看>>
javascript基础学习(一)
查看>>
MSSQL排序规则冲突
查看>>
synchronize模块
查看>>
批量修改文件名(Python)
查看>>
枚举排列
查看>>
MapReduce的手机流量统计的案例
查看>>
zabbix_get 命令介绍
查看>>
jQuery属性操作之类样式操作
查看>>
JavaScript跨域总结与解决办法
查看>>
pipeline的存储代码
查看>>
随机生成验证码信息
查看>>
[codevs1036]商务旅行<LCA:tarjan&倍增>
查看>>