(1)获取用户库位置

如果想要通过应用程序在用户库中创建文件,首先需要获得用户库中指定的位置,例如图片库、文档库等。这里值得注意的是,在获取用户库的位置之前,必须在Windows应用商店项目的清单文件Package.appxmanifest中开启相应的访问权限,如果应用需要访问音乐库,就需要在Package.appxmanifest文件的功能选项卡中勾选“音乐库”,如图13-4所示。

图13-4 开启访问音乐库的权限

以此类推,如果需要访问其他的库位置,可勾选相应的选项以开启访问权限。

在开启相应的权限之后,使用API参考中介绍的KnownFolders类的常用属性就可以获取到音乐库、图片库等位置。示例代码如下所示:

//获取文档库位置

StorageFolder documentFolder = KnownFolders.DocumentsLibrary;

//获取音乐库位置

StorageFolder musicFolder = KnownFolders.MusicLibrary;

//获取图片库位置

StorageFolder pictureFolder = KnownFolders.PicturesLibrary;

(2)创建文件

在获取了用户库位置之后,使用CreateFileAsync方法及其重载可以在用户库中创建文件,该方法需要获得一个参数来指定文件的名称,如果需要还可以使用另一个CreationCollisionOption类型的参数,指定如果已经存在同名文件时应该执行的操作。CreationCollisionOption是一个枚举,包含四个枚举成员,如下所示:

q  GenerateUniqueName,如果存在同名文件,创建文件时自动在文件名称后面追加一个数字。

q  ReplaceExisting,如果存在同名文件,创建文件时将其替换。

q  FailIfExists,如果存在同名文件,则返回错误。

q  OpenIfExists,如果存在同名文件,则将其打开。

下面的示例代码获取文档库,并在其中创建test.txt文件,若存在同名文件则将其替换。

StorageFolder storageFolder = KnownFolders.DocumentsLibrary;

StorageFile file = await storageFolder.CreateFileAsync("test.txt ", CreationCollisionOption.ReplaceExisting);

(3)文件读写

在文档库中创建了一个test.txt文件之后,若想对其进行写入和读取文本的操作,可以通过调用FileIO类的WriteTextAsync和ReadTextAsync方法来实现,示例代码如下所示:

//写入文本

await Windows.Storage.FileIO.WriteTextAsync(file, "内容字符串");

//读取文本

string text = await Windows.Storage.FileIO.ReadTextAsync(file);

除了以文本方式读写文件以外,还能以数据流的形式读写文件。在以数据流的形式写入文件内容时,首先需要通过StorageFile类的OpenAsync方法得到用于写入文件内容的数据流,然后创建一个DataWriter类的对象,使用DataWriter对象的WriteString方法将文本写入到输出流中,写入完成后,调用StoreAsync和FlushAsync方法保存文本并关闭输出流。示例代码如下所示:

var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);

using(var outputStream = stream.GetOutputStreamAt(0))

{

    //文件进行写入操作

    DataWriter dataWriter = new DataWriter(outputStream);

    dataWriter.WriteString("字符串内容");

    await dataWriter.StoreAsync();

    await outputStream.FlushAsync();

}

与写入文件相似,在以数据流形式读取文件时,同样需要首先通过调用OpenAsync方法获得读取文件的数据流,但与写入不同的是,读取文件需要使用DataReader类,通过此类的LoadAsync方法将文件中的内容以数据流的形式读取出来。示例代码如下所示:

var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);

uint size = (uint)stream.Size;

using (var inputStream = stream.GetInputStreamAt(0))

{

   //读取文件的操作

   DataReader dataReader = new DataReader(inputStream);

   uint numBytesLoaded = await dataReader.LoadAsync(size);

   string text = dataReader.ReadString(numBytesLoaded);

}

除了以上两种读写文件的方式,还可通过字节的方式读写文件,采用这种方式,需要一个缓冲区来存储读写数据。这种方式并不常用,在这里就不做过多介绍了,感兴趣的读者可以查阅相关资料。

Windows Store App 用户库文件操作的更多相关文章

  1. Windows Store App 用户库文件夹操作

    上面介绍了与用户库文件有关的操作,包括创建.读写等,下面将介绍与用户库文件夹相关的操作. 与文件操作一样,想要对用户库文件夹进行操作,需要首先获取用户库的相应位置,获取的方法上面已经介绍过了,这里不再 ...

  2. Windows Store App 用户库文件分组

    在Windows应用商店应用程序中浏览用户库中的文件时,可以将文件或者文件夹分组显示,以便于进行分类浏览,这类似于音乐库中的文件可以按照艺术家名称.创建日期或者评级等多种方式进行分类.本节内容将会介绍 ...

  3. Windows Store App 过渡动画

    Windows Store App 过渡动画     在开发Windows应用商店应用程序时,如果希望界面元素进入或者离开屏幕时显得自然和流畅,可以为其添加过渡动画.过渡动画能够及时地提示用户屏幕所发 ...

  4. 在桌面程序上和Metro/Modern/Windows store app的交互(相互打开,配置读取)

    这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情 ...

  5. Windows Phone App的dump 文件分析

    前言 我们在发布了自己的App以后,Windows Phone的Error Report机制会帮助我们收集程序的崩溃信息并发送到微软的服务器上,这可以辅助开发者提高App的稳定性. 那么如何利用这些d ...

  6. Windows Store App JavaScript 开发:获取文件和文件夹列表

    在应用程序中有时可能需要获取用户库中的内容,以便执行相关的操作.如果要获取某个用户库中的内容,需要先获取到这个用户库,获得用户库可以通过Windows.Storage命名空间中的KnownFolder ...

  7. Windows Store App JavaScript 开发:选取文件和文件夹

    前面提到过,文件打开选取器由FileOpenPicker类表示,用于选取或打开文件,而文件夹选取器由FolderPicker类表示,用来选取文件夹.在FileOpenPicker类中,pickSing ...

  8. Windows Store App JavaScript 开发:文件选取器

    正如前面章节C#语言中所介绍的,文件选取器是应用与系统进行交互的一个接口,通过文件选取器可以在应用中直接与文件系统进行交互,访问不同位置的文件或文件夹,或者将文件存储在指定位置.文件选取器分为对文件进 ...

  9. Windows Store App 文件选取器

    使用文件选取器可以访问除上面介绍的"应用程序存储"和"用户库"两个位置之外的本地文件或者文件夹.文件选取器是应用与系统进行交互的一个接口,通过文件选取器可以在应 ...

随机推荐

  1. Git开发分支管理

    远程仓库有master和dev分支的情况 1. 克隆代码 git clone https://somewhere.com/master-dev.git 2. 查看所有分支 git branch --a ...

  2. 【转载】WEB前端开发规范文档

    本文转载自谈笑涧<WEB前端开发规范文档> 为 新项目写的一份规范文档, 分享给大家. 我想前端开发过程中, 无论是团队开发, 还是单兵做站, 有一份开发文档做规范, 对开发工作都是很有益 ...

  3. WinForm实现对权限菜单进行管理

    一.界面: 二.数据库访问类: public class DataClass { private readonly string connect = ConfigurationManager.AppS ...

  4. 浅谈GridLayout(网格布局)

    Android 4.0 布局-->GridLayout 网格布局 以行列单元格的形式展示内部控件排列,可以实现类似计算机键盘效果 ,也可以实现可自动变行的标签群效果 使用GridLayout , ...

  5. Shell脚本_备份/etc数据

    vim backup_etc.sh chmod 755 backup_etc.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2 ...

  6. 【Android开发坑系列】之try-catch

    try { mViewPager.postDelayed(new Runnable() { @Override public void run() { getCurrentPage().render( ...

  7. Mathout

    1. 用Maven搭建Mahout的开发环境,并完成PPT 26页,最简单的例子.要求有过程说明和截图. 2. 用案例的数据集,基于Mahout,任选一种算法,对任意一个女性用户进行协同过滤推荐,并解 ...

  8. NYOJ-86 找球号(一)AC 分类: NYOJ 2014-02-02 10:45 160人阅读 评论(0) 收藏

    NO.1 单纯的傻傻的代码: #include<stdio.h> long long num[100000005]={0}; int main(){ int n, m, k; scanf( ...

  9. Android 5.0 全新的动画

    触摸反馈 ripple 触摸反馈是指用户在触摸控件时的一种可视化交互,在Android L之前,通常是通过press色变来凸显,但是因为是瞬间变化的效果,不如动画生动. 在Android L 中定义了 ...

  10. linux建立信任关系

    (1).切换到需要建立信任关系的用户(2).执行命令:ssh-keygen  -d,然后一直回车.该命令会在用户home目录下生成一个隐藏的.ssh目录.目录里面有两个文件:id_dsa.id_dsa ...