zoukankan      html  css  js  c++  java
  • Windows Store App 用户库文件操作

    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类的WriteTextAsyncReadTextAsync方法来实现,示例代码如下所示:

    //写入文本

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

    //读取文本

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

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

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

    }

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

  • 相关阅读:
    js---11闭包
    js---10作用域链
    js---12数据类型,数据类型转换,NaN,
    js---11运算符,流程控制,真假
    js---10时间类
    js--09定时器
    js---08函数 定时器
    js---07 js预解析,作用域---闭包
    js---06函数传参数
    [虎嗅]职场中年独白:我们是被嫌弃的少数派
  • 原文地址:https://www.cnblogs.com/finehappy/p/4213371.html
Copyright © 2011-2022 走看看