2017-10-30 1 views
2

Nun, da UWP .NET Standard 2.0 unterstützt, hat es Zugriff auf weitere System.IO-Namespaces, einschließlich Fileinfo und DirectoryInfo.Wie konvertiert man UWP StorageFile in .NET FileInfo?

Wie konvertiert man ein UWP StorageFile in eine Fileinfo? Und ein StorageFolder zu einem DirectoryInfo für diese Angelegenheit?

Der naive Ansatz (den vollständigen Pfad des StorageItem zu erhalten und ein Fileinfo zu erstellen) scheitert beim Versuch, das resultierende Fileinfo zu öffnen, und ich würde wirklich von der Verwendung PCLStorage wenn möglich wegkommen.

+0

Ihre naive Implementierung funktioniert gut in uwp auf Windows 10 Desktop, ich kann auf die resultierende fileinfo zugreifen, zum Beispiel Nachricht mit seiner Directory.FullName anzeigen. Vielleicht ist es abhängig von Provider, unter Windows 10 Name ist "This PC" (LOL) – vitalygolub

+0

Das funktioniert gut, bis Sie versuchen, diese FileInfo zu öffnen, um einen Stream zu erhalten. – Alberto

Antwort

1

System.IO.File und System.IO.FileInfo sind seit langem für UWP-Apps verfügbar. Sie sind nicht neu mit .Net-Standard 2.0

StorageFile und FileInfo tun nicht das Gleiche und sind im Allgemeinen nicht austauschbar. Sie sagen nicht, welchen Fehler Sie erhalten, aber ich vermute, dass es AccessDenied ist, weil Ihre App keinen direkten Zugriff auf den Pfad hat, den Sie verwenden möchten.

Standardmäßig haben Apps direkten Dateizugriff nur auf ihre ApplicationData und InstalledLocations. Sie können System.IO verwenden, um direkt auf diese Standorte zuzugreifen. Um auf andere Standorte zuzugreifen, denen der Benutzer Zugriff gewährt hat (direkt über eine Dateiauswahl, implizit durch Paketfunktionen usw.), muss die App den Dateibroker über die StorageFile- und StorageFolder-Klassen durchlaufen.

Sie können eine vermittelte Win32-Datei HANDLE von IStorageHandleAccess erhalten und eine System.IO.File daraus initialisieren, aber FileInfo bietet keine Möglichkeit zum Konstruieren von einem HANDLE.

+0

Ich erhalte das fragliche StorageFile über eine Dateiauswahl, ich bin mir der Einschränkungen aufgrund von UWP-Sandboxing bewusst. Das Problem ist, einen Strom aus diesen FileInfos zu bekommen: während ich die StorageFile öffnen kann, geht es mir gut, eine FileInfo mit ihrem Pfad zu konstruieren und zu versuchen, sie zu öffnen, verursacht eine Ausnahme (Zugriff verweigert). – Alberto

+1

Die FileInfo erhält keinen vermittelten Zugriff. Sie können es nur für Standorte verwenden, die die App direkt schreiben kann. Für andere müssen Sie aus dem StorageFile streamen oder IStorageHandleAccess verwenden, um eine System.IO.File zu initialisieren. –

Verwandte Themen