2016-04-16 26 views
1

我想選擇USB驅動器上的XML文件,然後打開並閱讀它。我想我對Universap Apps中的概念有誤解。Windows通用應用程序:打開USB驅動器上的文件

當我使用此代碼時,出現錯誤「訪問路徑'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調用它。刪除await後,我得到一個轉換錯誤「無法轉換'System .__ ComObject'類型的對象來鍵入'Windows.Storage.StorageFile'」。

我的概念錯誤是什麼?我如何使用選擇器選擇一個文件(或者我必須使用除選擇器以外的其他東西?)並打開並讀取它(xml)?如果它很重要:代碼應放置在按鈕的單擊事件中。

回答

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) 
+0

謝謝你,這是對我今後的工作/調查了良好的基礎 –

相關問題