Windows Universal App:在USB驱动器上打开文件

时间:2016-04-16 10:13:46

标签: vb.net async-await win-universal-app

我想在USB驱动器上选择一个XML文件,然后打开并阅读它。我认为我对Universap应用程序中的概念存在误解。

当我使用此代码时,我收到错误"访问路径' E:\ folder \ file.xml'被拒绝。"当试图加载它时。

Dim picker As Windows.Storage.Pickers.FileOpenPicker = New Windows.Storage.Pickers.FileOpenPicker
picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail
picker.FileTypeFilter.Add(".xml")
Dim File As Windows.Storage.StorageFile = Await picker.PickSingleFileAsync
 Await Task.Run(Function()
   If Not (File Is Nothing) Then
     Task.Yield()
     Dim loadedData As XDocument = XDocument.Load(File.Path)
   End If
End Function)

我的理解是,当使用选择器选择文件时,授予文件访问权限。也许是这样,因为我在Task.Run中访问它?

当我将picker.PickSingleFileAsync放入函数时它不起作用,因为我不能使用await来调用它。删除等待后,我得到一个强制转换错误"无法强制转换类型' System .__ ComObject'键入' Windows.Storage.StorageFile'。"

我的概念错误是什么?如何使用选择器选择文件(或者我必须使用除拾取器之外的其他东西?)并打开并读取它(xml)?如果重要:代码应放在按钮的单击事件中。

1 个答案:

答案 0 :(得分:2)

您只能访问File对象 您可以通过它的路径访问文件。

这种方式应该有效:

    Dim picker As Windows.Storage.Pickers.FileOpenPicker = New Windows.Storage.Pickers.FileOpenPicker
    picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail
    picker.FileTypeFilter.Add(".xml")
    Dim File As Windows.Storage.StorageFile = Await picker.PickSingleFileAsync

    Dim Fl = Await File.OpenAsync(Windows.Storage.FileAccessMode.Read)
    Dim inStream As Stream = Fl.AsStreamForRead()

    Dim loadedData As XDocument = XDocument.Load(inStream)