请帮助我,我无法访问我通过 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))
{
}
Run Code Online (Sandbox Code Playgroud)
怎么了?
由于 UWP 沙箱如何访问文件系统,您无法FileStream直接从 aStorageFile的路径构造 a 。相反,您有几个选择,从最简单到最复杂:
1)如果您的文件足够小,您可以使用FileIO静态类中的助手一次读取所有文件:
string text = await FileIO.ReadTextAsync(file); // or ReadLinesAsync or ReadBufferAsync, depending on what you need
Run Code Online (Sandbox Code Playgroud)
2)使用OpenAsync()StorageFile上的方法:
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read, StorageOpenOptions.AllowReadersAndWriters))
{
// your reading code here
}
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以使用、和扩展方法在IRandomAccessStream和 .NET之间进行转换,其文档在此处。StreamAsStream()AsStreamForRead()AsStreamForWrite()IRandomAccessStream
3)如果你想完全控制,你可以使用 获取SafeFileHandle底层文件CreateSafeFileHandle(),如下所示:
SafeFileHandle fileHandle = file.CreateSafeFileHandle(FileAccess.Read, FileShare.ReadWrite);
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用此文件句柄来创建标准FileStream:
using (FileStream fs = new FileStream(fileHandle, FileAccess.Read))
{
// Read stuff here
}
Run Code Online (Sandbox Code Playgroud)
这是在FileStreamUWP 上可靠地使用 a 的唯一方法StorageFile,应谨慎使用。官方文档有更多关于这样做的影响的细节。
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |