原文:
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);
}