前面有一篇讲过通过FilePicker让用户选择文件,然后通过StorageFile.OpenStreamForReadAsync() 和 StorageFile.OpenStreamForWriteAsync()返回StreamReader/StreamWritter来读写文文件。
https://blog.csdn.net/alai7150/article/details/120036249?spm=1001.2014.3001.5501
但是这个方法只能是文本读写(ASCII),如果我们要二进制读写文件怎么做呢?就需要用到Stream类或者FileStream类,怎么样从StorageFile获取Stream类呢?下面提供两种方法,第一种方法不是很好,效率有点低 (低于Winform下FileStream直接读取的效率的一半)。第二种方法和我们Winform下用FileStream直接打开文件效率相当。
//方法1:把从StorageFile打开文件并转为FileStream
StorageFile rFile = await filePicker.PickSingleFileAsync();
var handle = rFile.CreateSafeFileHandle(options: FileOptions.RandomAccess);
FileStream fs = new FileStream(handle, FileAccess.Read);
//方法2:从StorageFile打开Stream
StorageFile rFile = await filePicker.PickSingleFileAsync();
Stream stream = (await rFile.OpenReadAsync()).AsStreamForRead();
大家记得用第二种方法哦,效率高。至于为什么,我也去刨根问底。