文档章节

【万里征程——Windows App开发】文件&数据——写入与读取

NoMasp
 NoMasp
发布于 2015/09/08 21:47
字数 1188
阅读 4
收藏 0

在前面 【万里征程——Windows App开发】文件&数据——读取文件/文件夹名我们简单得获取了文件名和文件夹名,很明显没有太大的意思对吧,这里就来写真正的文件。而在 【万里征程——Windows App开发】文件&数据——文件选取器中,已经能够通过文件选取器保存和打开文件了,这里是对保存和读取文件的一些补充。

准备工作

在XAML中添加一个TextBlock用于显示相关信息,添加一个Button来使用它的Click事件,当然了,最后分别创建2个。

创建文件和读取文件

1.实例化StorageFolder类

我们的文件不可能让其随意保存在计算机/手机中的任何一个地方,应该先确定它的文件夹,对吧?

在新的Windows 8中,微软开启了Windows上的App时代,下载的软件再也不能随意安装到任何地方了,而是由操作系统统一放到一块叫做“独立存储”的地方。这也是出于安全的考虑。用过Windows Phone 8的朋友应该更加清楚了。

那么下面这行代码的LocalFolder究竟在哪里呢?

StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;

下图中的文件,就是我当前所写的App。(补充一条哦,一开始我装了Win8后,下载了一个游戏,模拟类的,有金币呀什么的,后来我找到这个App的文件,将数据改了之后金币就哗哗的啦。当然了,对于其他单机而言这个完全不值一提,但App的数据,相信还有很多人没有改过吧。)

这里写图片描述

那么这张图中的红方框的文件夹就是LocalFolder啦,下面还有一个存储漫游文件的文件夹。

这里写图片描述

不论是读取文件还是写入文件,都得先确定一个文件夹哦。

2.实例化StorageFile

确定了文件夹,就得确定文件咯。对于创建文件而言,执行以下代码。既然用到了异步,在函数上加上async是必不可少的咯,这一点我们在前面讲到过。后面的ReplaceExisting属性是指的,如果该文件(名)已经存在了,则替换它。

 StorageFile file =
            await folder.CreateFileAsync("New Document.txt", CreationCollisionOption.ReplaceExisting);

那么对于读取文件呢,就直接读取好啦。

 StorageFile file = await folder.GetFileAsync("sample.txt");

3.创建和读取文件

将文本写入文件按照如下代码,将文件名和文本内容(字符串)。

await FileIO.WriteTextAsync(file, "Write text to file.");

读取文件也是类似的。

string text = await FileIO.ReadTextAsync(file);

我们还可以将这个读取的字符串传递给前面定义的TextBlock来加以调试。以下是完整的代码。

 // 创建文件
StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFile file = await folder.CreateFileAsync("New Document.txt", CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(file, "Write text to file.");
// 2  从文本读取文件
StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFile file = await folder.GetFileAsync("sample.txt");
string text = await Windows.Storage.FileIO.ReadTextAsync(file);
tBlockReadInfo.Text = text;

使用缓冲区将字节写入到文件或从文件读取字节

1.实例化StorageFolder类
同上。

2.实例化StorageFile
同上。

3.将字节写入到文件

a.建立缓冲区

  var buffer = Windows.Security.Cryptography.CryptographicBuffer.ConvertStringToBinary("There's buffer ...... ", Windows.Security.Cryptography.BinaryStringEncoding.Utf8);

b.将缓冲区中的字节写入到文件

await Windows.Storage.FileIO.WriteBufferAsync(file, buffer);

4.从文件读取字节

a.将文件加载到缓冲区

var buffer = await Windows.Storage.FileIO.ReadBufferAsync(file);

b.实例化DataReader,读取缓冲区

DataReader dataReader = Windows.Storage.Streams.DataReader.FromBuffer(buffer);

c.从DataReader对象中读取字符串

string text = dataReader.ReadString(buffer.Length);

使用流将文本写入文件或从文件读取文本

1.实例化StorageFolder类
同上。

2.实例化StorageFile
同上。

3.新建流,并异步地将file打开,使用可读写的方式

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

4.将文本写入到文件

a.使用using

using (var writeStream= stream.GetOutputStreamAt(0))
{
    ......
}

b.(在using语句的花括号内)创建DataWriter对象,并调用DataWriter.WriteString方法,将文本写入到writeStream中

DataWriter dataWriter = new DataWriter(writeStream);
dataWriter.WriteString("Stream is a good thing.");

c.将文本保存到文件中,并通过StoreAsync和FlushAsync方法存储和关闭流

await dataWriter.StoreAsync();
await writeStream.FlushAsync();

5.从文件读取文本

a.获取该流的size

var size = stream.Size;

b.使用using

using (var readStream = stream.GetOutputStreamAt(0))
{
    ......
}

c.(在using语句的花括号内)创建DataWriter对象,并调用LoadAsync方法,最后调用ReadString即可。最后还可以将信息输出到TextBlock中。

DataReader dataReader = new DataReader(readStream);
uint uintBytes = await dataReader.LoadAsync((uint)size);
string text = dataReader.ReadString(uintBytes);
tBlockReadInfo.Text = text;



感谢您的访问,希望对您有所帮助。

欢迎大家关注或收藏、评论或点赞。


为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp


版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp

本文转载自:http://blog.csdn.net/nomasp/article/details/45063789

NoMasp
粉丝 7
博文 334
码字总数 0
作品 0
镇江
程序员
私信 提问
加载中

评论(1)

nomasp 博客导读:Lisp/Emacs、Algorithm、Android

版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/44966625 Profile Introduction to Blog 您能看到这篇博客导读...

nomasp
2015/09/17
0
0
浙江万里学院-阿里云大数据应用学院2018级新生开学典礼隆重举行

2018年10月11日,由浙江万里学院、阿里云、慧科集团三方共建的阿里云大数据应用学院2018级新生开学典礼在浙江万里学院隆重举行。浙江万里学院阿里云大数据应用学院不仅是浙江省首个,也是目前...

昕华
2018/10/12
0
0
Java IO流(二)

IO流常用基类 字节流的抽象基类: 字符流的抽象基类: 注意:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀的。例如,InputStream的子类——FileInputStream,Reader的子类—...

yerenyuan_pku
2017/10/14
0
0
学习笔记(10月27日)--文件的操作

二周五次课(10月27日) 1.读取文件内容 文件操作需要3步: 1.1 open文件 1.2 文件操作(读或者写) 1.3 关闭文件 例子: import codecsf = codecs.open('1.txt')print(f.read())f.close() ...

wanyang_wanyang
2018/06/26
0
0
Node.js开发入门—Stream用法详解

Stream是Node.js中非常重要的一个模块,应用广泛。一个流是一个具备了可读、可写或既可读又可写能力的接口,通过这些接口,我们可以和磁盘文件、套接字、HTTP请求来交互,实现数据从一个地方...

foruok
2015/10/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Vue实战之【企业开发常见问题】

1.vue框架使用注意事项和经验 1.1 解决Vue动态路由参数变化,页面数据不更新 问题描述: 遇到动态路由如:/page/:id 从/page/1 切换到 /page/2 发现页面组件没有更新 解决方式1: 给<router-v...

涂老师
22分钟前
51
0
安卓App接入友盟统计

在 友盟注册后 先增一个应用获取一个key 我这边应用的自动集成方法 1.标红表示集成友盟 allprojects { repositories { maven { url 'https://jitpack.io' } maven {...

chenhongjiang
28分钟前
52
0
Quick BI如何做好数据安全管控?

引言 作为阿里云上的智能BI套件,Quick BI的服务架构包含web应用和后端执行机。其中,WEB应用主要提供浏览器端的访问接入,执行机承载数据源连接及OLAP分析服务。Quick BI基于阿里云提供安全...

一肥仔
28分钟前
27
0
mobx 初试小结

在属性改变的瞬间,做处理;(只需要执行一次)使用 when;这个在检测属性变化时操作很有效;可以和 react 中state de preValue, currentValue 改写而成; componentDidMount() {    w...

IrisHuang
28分钟前
57
0
SpringBoot2.x基础篇:Linux后台运行Jar以及Jvm参数调优

知识改变命运,撸码使我快乐,2020继续游走在开源界<br/> 点赞再看,养成习惯<br/> 给我来个Star吧,点击了解下基于SpringBoot的组件化接口服务落地解决方案 我们将编写的应用程序打包为Jar...

恒宇少年
37分钟前
71
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部