file - UWP如何访问文件夹中的文件
问题描述
请帮助我,我无法访问我通过 FileOpenPicker 选择的文件。
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.Desktop;
openPicker.CommitButtonText = "Открыть";
openPicker.FileTypeFilter.Add(".xlsx");
var file = await openPicker.PickSingleFileAsync();
using (FileStream fs = new FileStream(file.Path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
}
怎么了?
解决方案
由于 UWP 沙箱访问文件系统的方式,您不能FileStream
直接从 aStorageFile
的路径构造 a 。相反,您有几个选项,按从最简单到最复杂的顺序排列:
1)如果您的文件足够小,您可以使用FileIO
静态类中的帮助程序一次读取它:
string text = await FileIO.ReadTextAsync(file); // or ReadLinesAsync or ReadBufferAsync, depending on what you need
2)使用OpenAsync()
StorageFile上的方法:
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read, StorageOpenOptions.AllowReadersAndWriters))
{
// your reading code here
}
如果需要,您可以使用,和扩展方法在IRandomAccessStream
.NET 和 .NET之间进行转换,其文档在此处。Stream
AsStream()
AsStreamForRead()
AsStreamForWrite()
IRandomAccessStream
3) 如果您想要完全控制,您可以SafeFileHandle
使用 获取底层文件CreateSafeFileHandle()
,如下所示:
SafeFileHandle fileHandle = file.CreateSafeFileHandle(FileAccess.Read, FileShare.ReadWrite);
然后,您可以使用此文件句柄来创建标准FileStream
:
using (FileStream fs = new FileStream(fileHandle, FileAccess.Read))
{
// Read stuff here
}
FileStream
这是在UWP 上可靠使用 a 的唯一方法StorageFile
,应谨慎使用。官方文档有更多关于这样做的含义的详细信息。
推荐阅读
- c++ - 类中的c ++ winapi窗口进程不起作用
- javascript - 使用 NG-Zorro 的 Angular 多步骤表单向导
- python - 我无法切片和修改我的数组以从中提取所需的信息
- azure - Azure 搜索索引中可以有不同的数据结构吗?
- firebase - 在flutter中找到n个最近的位置:本地数据库(Sqlite)结合Cloud Firestore vs Firebase Realtime Database
- scala - 参数值 [1234567890] 与预期类型不匹配 [scala.Option (n/a)]
- python - InvalidArgumentError:记录中的字段 N 不是有效的 int32,TF.make_csv_dataset 中的错误
- javascript - jQuery:简单的 Lightbox 过渡速度
- sapui5 - TinyMCE4 绑定到 OData 属性后会消失
- python - 如何在discord的丰富嵌入中嵌入gif?像拥抱,亲吻命令