我想在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)?如果重要:代码应放在按钮的单击事件中。
答案 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)