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

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 != )
{
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 == )
return; StorageFolder firstCard = sdCards[];

要注意的是,对 SD Card 的文件读取需要事先在 appxmanifest 中增加文件类型关联,确定需要读取的文件类型:

(6)备注

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

Windows Phone 8.1 数据处理的更多相关文章

  1. Windows环境下大数据处理的构想(一)

    为什么不呢?我们有了RPC/RMI和MAP,为什么不能在windows环境下处理大数据呢?windows是迄今为止最普及的操作系统,据市调公司NetMarketShare最新(2019年5月)统计数据 ...

  2. Reactive ExtensionsLINQ和Rx简单介绍

    LINQ和Rx简单介绍 相信大家都用过Language Integrated Query (LINQ),他是一种强大的工具能够从集合中提取数据.Reactive Extensions(Rx)是对LIN ...

  3. Kinect for Windows SDK开发入门(四):景深数据处理 上

    原文来自:http://www.cnblogs.com/yangecnu/archive/2012/04/04/KinectSDK_Depth_Image_Processing_Part1.html ...

  4. 吴裕雄--天生自然 pythonTensorFlow图形数据处理:windows操作系统安装指定版本的tensorflow

    pip install tensorflow==1.14.0

  5. 吴裕雄--天生自然 pythonTensorFlow图形数据处理:windows操作系统删除tensorflow

    输入:pip uninstall tensorflow Proceed(y/n):y

  6. Windows平台分布式架构实践 - 负载均衡

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

  7. 《Caffe下跑AlxNet之数据处理过程》

    环境:Windows 最近用Caffe跑了一下AlxNet网络,现在总结一下数据处理部分:(处理过的数据打包链接:http://pan.baidu.com/s/1sl8M5ad   密码:ph1y) ...

  8. Windows平台分布式架构实践 - 负载均衡 上

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

  9. 基于Windows 10平台的PM2.5检测器制作

    本篇文章详细讲解了如何利用SDS011激光式PM2.5传感器.HC-06蓝牙模块和Windows 10设备完成一个简单的PM2.5检测器及其应用程序的开发.该检测器使用蓝牙完成数据输出,方便设备连接, ...

随机推荐

  1. 使WordPress改域名后网站正常运行的方法

    使WordPress改域名后网站正常运行的方法 wp-content/wp-config.php $path = '/blog'; $scheme = (isset($_SERVER['HTTPS'] ...

  2. hysbz 2243 染色(树链剖分)

    题目链接:hysbz 2243 染色 题目大意:略. 解题思路:树链剖分+线段树的区间合并,可是区间合并比較简单,节点仅仅要记录左右端点的颜色就可以. #include <cstdio> ...

  3. 玩转Bootstrap(基础) -- (6.导航条基础)

    1.导航条样例 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" ...

  4. 发送 email 过程

    发送 email 过程 SMTP基本命令集: 命令 描述 ---------- HELO 向服务器标识用户身份发送者能欺骗,说谎,但一般情况下服务器都能检测到. MAIL 初始化邮件传输 mail f ...

  5. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

  6. amaze样例页面分析(一)

    amaze样例页面分析(一) 一.总结 1.从审查(inspect)中是很清楚的可以弄清楚这些part之间的结构关系的 2.一者在于弄清楚他们之间的结构关系,二者在于知道结构的每一部分是干嘛的 3.i ...

  7. invalid syntax 无效语法

    python用的是spyder编译器, 再出现上一行少了个括号的时候. 在下一行显示有错误.

  8. PatentTips - Resource partitioning and direct access utilizing hardware support for virtualization

    BACKGROUND The present disclosure relates to the resource management of virtual machine(s) using har ...

  9. 右键菜单添加带图标的Notepad++

    给Notepad++ 加带图标右键菜单 方式一: 拷贝以下代码建立一个reg文件,替换相关路径,保存,双击运行加入注册表 Windows Registry Editor Version 5.00 [H ...

  10. 学习笔记:Vue——混入

    前言: 到现在用Vue做了不少项目了,用到的都是初阶的功能,很多高阶能力都没有用到.仅用初级阶段也能做项目,甚至是复杂项目,可见vue之强大,果然是渐进式开发方式. 但是本着虚心学习的态度,还是要抽空 ...