博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Win8 Metro 文件的读写操作
阅读量:5167 次
发布时间:2019-06-13

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

对于数字图像处理而言,一张图像我们不一定非要对图像对象进行操作,多数情况我们要使用到二进制,文本等文件的读写,而Win8Metro中,我们不能在向以前那样调用WIN32的API函数来进行文件操作,因此,下面就来介绍一下Win8 Metro中文件的读写操作。

1 Windows 8 Metro Style App中文件的操作都包含在Windows.Storage命名空间中,其中包括StorageFolder,StorageFile,FileIO等类库。

2 Win8文件的读写操作都是异步方式进行的,因此要使用async

3 创建文件:

StorageFile storageFile=await

Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption.ReplaceExisting);

这里我们创建了一个1.txt的文档,如果已经存在这个文档,那么新建的文档将替换,覆盖掉旧文档。

  由于文档读写是异步方式操作,因此,我们要将它放到async修饰的函数里才可以使用,具体如下:

privateasyncvoid SelectImageOne(byte[]outArary)

        {

            StorageFile storageFile=await Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption.ReplaceExisting);

            awaitFileIO.WriteBytesAsync(storageFile, outArary);

        }

  在上述的代码中,参数是我们要写入到文件“1.txt”里的内容,这里是一个byte[]数组。

4 写入文件:

  如3中的代码所示awaitFileIO.WriteBytesAsync(storageFile, outArary);

  写入文件的方法是FileIO中的write方法,这里一共有以下四种方法:

  WriteBufferAsync(Windows.Storage.IStorageFile file, IBuffer buffer);

  WriteBytesAsync(Windows.Storage.IStorageFile file, byte[] buffer);

WriteLinesAsync(Windows.Storage.IStorageFile file, IEnumerable<string> lines);

WriteLinesAsync(Windows.Storage.IStorageFile file, IEnumerable<string> lines,

UnicodeEncoding encoding);

WriteTextAsync(Windows.Storage.IStorageFile file, string contents);

WriteTextAsync(Windows.Storage.IStorageFile file, string contents,

UnicodeEncoding encoding);

  这里我们列举的是写入byte[]的方法。

5 打开文件:

StorageFile storageFile=await

Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption. OpenIfExists);

  这里我们打开了一个名字为”1.txt”的文本文件。

6 读取文件:

  在FileIO中有三种文件读取方法,分别读取不同的文件:

awaitFileIO.ReadTextAsync(Windows.Storage.IStorageFile file);

awaitFileIO.ReadTextAsync(Windows.Storage.IStorageFile file, UnicodeEncoding encoding);//返回指定的文本编码格式

awaitFileIO. ReadBufferAsync (Windows.Storage.IStorageFile file);

awaitFileIO. ReadLinesAsync (Windows.Storage.IStorageFile file);

awaitFileIO. ReadLinesAsync (Windows.Storage.IStorageFile file, UnicodeEncoding encoding);

  这里我们以文本为例:

  string fileIContent = awaitFileIO. ReadTextAsync (storageFile);

  这样我们就返回了一个string文本。

  我们也可以通过流来读取文件:

IBuffer buffer = await FileIO.ReadBufferAsync(storageFile);

using (DataReader dataReader = DataReader.FromBuffer(buffer))

{

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

}

7 IBuffer, byte[], Stream之间的相互转换:

StorageFile storageFile=await

Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption. OpenIfExists);

IBuffer buffer = await FileIO.ReadBufferAsync(storageFile);

byte[] bytes=WindowsRuntimeBufferExtensions.ToArray(buffer,0,(int)buffer.Length);

Stream stream = WindowsRuntimeBufferExtensions.AsStream(buffer);

8 错误总结:

  这个文件操作中最容易出现如下错误:

Error         1       App manifest contains a contract 'windows.fileTypeAssociation' without name on element 'FileTypeAssociation'.

出现如下情况,是因为我们没有将要打开的文件类型添加到系统中去,这时我们可以按如下步骤进行:

  首先,打开项目工程的Package.appxmanifest或者mainfest,界面如下:

Win8 Metro 文件的读写操作 - CSharp - C

 然后,点击Capabilities选项(比如我们要打开txt文档):

 

Win8 Metro 文件的读写操作 - CSharp - C

 

 我们以打开txt文件为例,我们要将Documents Library Access打上对勾。

  接着,我们点击Declarations选项,进入新界面如下:

Win8 Metro 文件的读写操作 - CSharp - C

  这里注意了,我们要点击Select one,在里面选择File Type Associations选项,然后点击Add添加,在右边的显示框中,我们要将Name设置为txt,将File type设置为文件后缀名(.txt),这样就可以了。

  最后点击保存设置,OK。

 
注:转自

转载于:https://www.cnblogs.com/kaili/p/3205668.html

你可能感兴趣的文章
java如何获取其它用户登录的真是IP地址
查看>>
Jquery通过指定层次关系获取元素
查看>>
c# for 和 foreach 的区别
查看>>
docfx (一)
查看>>
通过jsoup对网页进行数据抓取。
查看>>
git文件名大小写问题
查看>>
ANDROID笔记:AIDL介绍
查看>>
SQL基本语句:1.模式 3.索引
查看>>
常用数据结构栈的应用—-表达式求值
查看>>
python+selenium如何定位页面的元素,的几种定位元素的方法。
查看>>
简单的传球游戏(矩阵)
查看>>
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
查看>>
[蓝桥杯]2014蓝桥省赛B组题目及详解
查看>>
SuperSocket入门(一)-Telnet服务器和客户端请求处理
查看>>
文件操作
查看>>
20162319莫礼钟 实验五 网络编程与安全
查看>>
python ---用户输入
查看>>
R_Studio(学生成绩)对数值型数据进行统计量分析
查看>>
Angular 1.x 下 兼容IE8 placeholder
查看>>
Android根据baidu Android定位SDK实现定位
查看>>