Benutzer mit den meisten Antworten
FileOpenPicker funktioniert unter Windows iot nicht

Frage
-
Ich programmiere zur zeit eine Windows Universal App für den Raspberry PI. Ich will eine Datei von einem USB-Stick einlesen. Das Problem ist das der FileOpenPicker sich nicht öffnen lässt. Nach ein bisschen Recherche bin ich auf dass hier gestoßen:
"Important In Windows 8 if you attempt to display the file picker while your app is snapped, the file picker will not be shown and an exception will be thrown. You can avoid this by making sure your app is not snapped, or by unsnapping it before you call the file picker. The following code examples and the File picker sample show you how. Note that Windows 8.1 does not define a specific snapped window size. Instead, users can resize apps to any width, down to the minimum. Therefore, if your app will deploy only on Windows 8.1, you can ignore the EnsureUnsnapped function and calls to it in this topic's example code."
Quelle:
https://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.pickers.fileopenpicker.aspx
Ich denke das Problem ist dass sich die App auf dem Raspberry PI im Vollbild läuft und das kein zweites Fenster geöffnen werden kann.
Antworten
-
Hi program in progress,
das Problem ist, dass diese API unter IoT noch nicht unterstützt wird. Eine Übersicht findest Du hier:
https://ms-iot.github.io/content/en-US/win10/UnavailableApis.htm
Darin taucht auch der FileOpenPicker als noch nicht unterstützte Klasse auf.
Thomas Claudius Huber
"If you can't make your app run faster, make it at least look & feel extremly fast"
My latest Pluralsight-courses:
XAML Layout in Depth
Windows Store Apps - Data Binding in Depth
twitter: @thomasclaudiush
homepage: www.thomasclaudiushuber.com- Bearbeitet Thomas Claudius HuberMVP Freitag, 21. August 2015 18:58
- Als Antwort vorgeschlagen Michael Koster Montag, 24. August 2015 07:00
- Als Antwort markiert Aleksander Chalabashiev Donnerstag, 3. September 2015 06:56
-
Ich hab meinen eigene FileOpenPicker programmiert und nutzte jetzt KnownFolders.RemovableDevices um zugriff auf den USB-Stick zu bekommen. Mit StorageFolder.GetFoldersAsync() lass ich mir die Ordner anzeigen und kann hin und her navigieren. Dateien zeig ich mit StorageFolder.GetFilesAsync() an dabei ist wichtig das im AppManifest mindestens ein Dateityp definiert ist. GetFilesAsync gibt die Ausnahme Zugriff verweigert zurück wenn kein DateiTyp definiert ist und sonst alle Dateien vom Definierten DateiTyp.
Mein Code:
private async void OrdnerLaden(string Pfad) { try { AktuellerPfad = Pfad; listViewOrdnerSelect.Items.Clear(); StorageFolder Ordners = await StorageFolder.GetFolderFromPathAsync(Pfad); UnterOrdner1 = await Ordners.GetFoldersAsync(); UnterOrdner2 = await Ordners.GetFilesAsync(); foreach (StorageFolder Ordner in UnterOrdner1) { listViewOrdnerSelect.Items.Add(Ordner.Name); } foreach (StorageFile Datei in UnterOrdner2) { listViewOrdnerSelect.Items.Add(Datei.Name); } } catch (Exception ex) { textBlockDatei.Text = "Fehler:" + ex.Message; } }
Alle Antworten
-
Hi program in progress,
das Problem ist, dass diese API unter IoT noch nicht unterstützt wird. Eine Übersicht findest Du hier:
https://ms-iot.github.io/content/en-US/win10/UnavailableApis.htm
Darin taucht auch der FileOpenPicker als noch nicht unterstützte Klasse auf.
Thomas Claudius Huber
"If you can't make your app run faster, make it at least look & feel extremly fast"
My latest Pluralsight-courses:
XAML Layout in Depth
Windows Store Apps - Data Binding in Depth
twitter: @thomasclaudiush
homepage: www.thomasclaudiushuber.com- Bearbeitet Thomas Claudius HuberMVP Freitag, 21. August 2015 18:58
- Als Antwort vorgeschlagen Michael Koster Montag, 24. August 2015 07:00
- Als Antwort markiert Aleksander Chalabashiev Donnerstag, 3. September 2015 06:56
-
Danke für die schnell Antwort.
Da ich nicht damit rechne das die API in nächster zeit unterstützt wird versuch ich nun eine eigene Oberfläche zum Dateien öffnen zu programieren.
Ich verwenden dafür die Funktion Directory.GetDirectories() und Directory.GetFiles() um die Dateien und Ordner in einem ListView Anzuzeigen. Wenn ich als Pfad Directory.GetCurrentDirectory() angebe dann funktioniert es. Wenn ich aber versuche einen Pfad manuell einzugeben z.B. @"E:\Visual Studio 2015\Projects" dann wir der Pfad nicht erkannt sowohl unter Windows 10 als auch auf dem RaspberryPI. Wurde das Pfadsystem bei universellen apps verändert?
-
Hallo,
du solltest in den Windows Apps immer nur mit StoreFile/StorageFolder arbeiten. Diese haben teilweise mehr Möglichkeiten und sind besser auf das neue Berechtigungssystem zugeschnitten. So könnte der Benutzer eine Datei über den FileOpenPicker auswählen auf die du normalerweise keinen Zugriff hättest. Durch das StorageFile-Objekt erhältst du aber wieder Zugriffsrechte.
Das du auf einige Dinge überhaupt keinen Zugriff erhältst dürfte daran liegen dass du entweder laut App Contracts nie oder nur mit bestimmten Berechtigungen darauf zugreifen darfst.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Ich hab meinen eigene FileOpenPicker programmiert und nutzte jetzt KnownFolders.RemovableDevices um zugriff auf den USB-Stick zu bekommen. Mit StorageFolder.GetFoldersAsync() lass ich mir die Ordner anzeigen und kann hin und her navigieren. Dateien zeig ich mit StorageFolder.GetFilesAsync() an dabei ist wichtig das im AppManifest mindestens ein Dateityp definiert ist. GetFilesAsync gibt die Ausnahme Zugriff verweigert zurück wenn kein DateiTyp definiert ist und sonst alle Dateien vom Definierten DateiTyp.
Mein Code:
private async void OrdnerLaden(string Pfad) { try { AktuellerPfad = Pfad; listViewOrdnerSelect.Items.Clear(); StorageFolder Ordners = await StorageFolder.GetFolderFromPathAsync(Pfad); UnterOrdner1 = await Ordners.GetFoldersAsync(); UnterOrdner2 = await Ordners.GetFilesAsync(); foreach (StorageFolder Ordner in UnterOrdner1) { listViewOrdnerSelect.Items.Add(Ordner.Name); } foreach (StorageFile Datei in UnterOrdner2) { listViewOrdnerSelect.Items.Add(Datei.Name); } } catch (Exception ex) { textBlockDatei.Text = "Fehler:" + ex.Message; } }