UWP入门(十)--创建、写入和读取文件

简介: 原文:UWP入门(十)--创建、写入和读取文件 核心的 API github代码 StorageFolder 类 StorageFile 类 FileIO 类 使用 StorageFile 对象读取和写入文件 1.
原文: UWP入门(十)--创建、写入和读取文件

核心的 API github代码

  • StorageFolder 类
  • StorageFile 类
  • FileIO 类

使用 StorageFile 对象读取和写入文件

1. 创建文件

// Create sample file; replace if exists.
Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

Windows.Storage.StorageFile sampleFile = await storageFolder.CreateFileAsync("sample.txt",Windows.Storage.CreationCollisionOption.ReplaceExisting);

Debug.Write(""+storageFolder.Path);

创建路径为:

C:\Users\v-shenya\AppData\Local\Packages\e0e11ee4-de7a-4679-a860-651e63d24a4a_nj65d38msn17e\LocalState

2. 写入文件

下面介绍了如何使用 StorageFile 类在磁盘上写入可写文件。 每种写入文件(除非你在创建后立即写入文件)的方法的常见第一步是使用 StorageFolder.GetFileAsync 获取文件

 //1.获取文件
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile sampleFile = await storageFolder.GetFileAsync("sample.txt");

2.1 将文本写入文件

通过调用 FileIO 类的 WriteTextAsync 方法,将文本写入文件

await FileIO.WriteTextAsync(sampleFile, "Swift as a shadow");

2.2 使用缓冲区将字节写入文件(2 步)

//1 首先,调用 ConvertStringToBinary 以获取你想要写入文件的字节(基于随机字符串)的缓冲区
var buffer = Windows.Security.Cryptography.CryptographicBuffer.ConvertStringToBinary(
        "What fools these mortals be", Windows.Security.Cryptography.BinaryStringEncoding.Utf8);

//2然后,通过调用 FileIO 类的 WriteBufferAsync 方法,将字节从你的缓冲区写入文件
await Windows.Storage.FileIO.WriteBufferAsync(sampleFile, buffer);

2.3 使用流将文本写入文件(4 步)

//使用流将文本写入文件(4 步)
//1.首先,调用 StorageFile.OpenAsync 方法打开文件。 打开操作完成后,它将返回文件的内容流。
var stream = await sampleFile.OpenAsync(FileAccessMode.ReadWrite);

//2.接下来,通过从 stream 调用 GetOutputStreamAt 方法获取输出流。 将其放到 using 语句中以管理输出流的生存期
using (var outputStream = stream.GetOutputStreamAt(0))
{
     // We'll add more code here in the next step.
}
stream.Dispose(); // Or use the stream variable (see previous code snippet) with a using statement as well.

//3.现在,将此代码添加到现有的 using 语句中,以通过创建一个新的 DataWriter 对象和调用 DataWriter.WriteString 方法写入输出流
using (var dataWriter = new Windows.Storage.Streams.DataWriter(outputStream))
{
     dataWriter.WriteString("DataWriter has methods to write to various types, such as DataTimeOffset.");
}

//4.最后,添加此代码(在内部 using 语句中)以使用 StoreAsync 将文本保存到你的文件并使用 FlushAsync 关闭该流
await dataWriter.StoreAsync();
await outputStream.FlushAsync();

3. 从文件读取

下面介绍了如何使用 StorageFile 类在磁盘上从文件进行读取。 每种从文件读取的方法的常见第一步是使用 StorageFolder.GetFileAsync 获取文件。

StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile sampleFile = await storageFolder.GetFileAsync("sample.txt");

3.1 从文件读取文本

通过调用 FileIO 类的 ReadTextAsync 方法,从文件读取文本

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

3.2 通过使用缓冲区从文件读取文本(2 步)

首先,调用 FileIO 类的 ReadBufferAsync 方法

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

然后,使用 DataReader 对象先读取缓冲区的长度,然后读取其内容

using (var dataReader = Streams.DataReader.FromBuffer(buffer))
{
     string text = dataReader.ReadString(buffer.Length);
}

3.3 使用流从文件读取文本(4 步)

通过调用 StorageFile.OpenAsync 方法,为你的文件打开流。 操作完成后,它将返回文件的内容流

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

获取稍后要使用的流的大小

ulong size = stream.Size;

通过调用 GetInputStreamAt 方法获取输入流。 将其放到 using 语句中以管理流的生存期。 调用 GetInputStreamAt 时指定 0,以将位置设置在流的开头

using (var inputStream = stream.GetInputStreamAt(0))
    {
        // We'll add more code here in the next step.
    }

最后,将此代码添加到现有的 using 语句中以在流上获取 DataReader 对象,然后通过调用 DataReader.LoadAsync 和 DataReader.ReadString 读取文本

using (var dataReader = new Windows.Storage.Streams.DataReader(inputStream))
    {
        uint numBytesLoaded = await dataReader.LoadAsync((uint)size);
        string text = dataReader.ReadString(numBytesLoaded);
    }
目录
相关文章
|
3月前
|
JavaScript Shell API
小笔记:Electron中关联格式、处理文件、创建链接的相关编程
小笔记:Electron中关联格式、处理文件、创建链接的相关编程
60 0
|
3月前
Qt6学习笔记十四(文件读写、文件信息读取)
Qt6学习笔记十四(文件读写、文件信息读取)
55 0
|
4月前
qt初入门1:qt读文件的几种方式简单整理
qt初入门1:qt读文件的几种方式简单整理
51 0
|
4月前
|
小程序 Shell PHP
laravel5.8(二十三)导出PDF
有需求需要使用PHP导出pdf。下面记录一下我使用的两种方式 一:laravel-tcpdf 导出PDF文件Laravel框架为我们集成了一个插件tcpdf。 下载地址: github.com/elibyy/tcpd… 然后使用composer进行安装就可以了。 具体安装过程,请移步《laravel5.8(十)引入第三方类库》 使用的时候记得use 一下 命名空间。 但是这里有一个问题,使用这个插件导出文件无法使用中文,且我还没有找到解决办法,因此,这个laravel的tcpdf插件我就没有使用。 二:tcpdf tcpdf官方网站: tcpdf.org/ 我下载了完整版的TCPDF 下载地址
38 0
|
10月前
|
JavaScript Shell API
笔记:Electron中关联格式、处理文件、创建链接的相关编程
本文介绍关于在Electron中绑定文件格式、在菜单中打开、使用文件API、处理桌面链接等等。
119 0
VB中的文件夹和文件路径的控制【VB学习笔记2020课堂版11】
VB中的文件夹和文件路径的控制【VB学习笔记2020课堂版11】
241 0
VB中的文件夹和文件路径的控制【VB学习笔记2020课堂版11】
|
vr&ar 图形学
【100个 Unity小知识点】☀️ | Unity 可以在编辑器中读取Excel,打包成exe后就无法读取的问题
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
QML学习笔记(七)-如何查看帮助手册中的控件例子
在QtCreator中,帮助里搜索早已写好的控件例子。 1.点击 帮助 2.在搜索栏里搜索 cuostomiz   选择QtQuick Control ,就可以打开文档的自定义控件例子进行参考使用     一一点开就可以看见完整代码  
1365 0
|
C# BI
wpf中xps文档合并功能实现
原文:wpf中xps文档合并功能实现      跟着上一篇的xps文档套打的文章,近期一直在研究xps打印技术,其中用户提到了一个需求,要求能够多页面进行打印,我的想法是,先生成xps文件,然后将文件读取出来以后,合并成一个文件来处理。
1034 0