2017-10-30 13 views
2

UWPは.NET Standard 2.0をサポートしているため、FileinfoDirectoryInfoなど、System.IO名前空間の多くにアクセスできます。UWP StorageFileを.NET FileInfoに変換するには?

UWP StorageFileをFileinfoに変換するにはどうすればよいですか? DirectoryInfoへのStorageFolderについては、

結果のFileinfoを開こうとすると、(ファイルシステムの完全なパスを取得してFileinfoを構築する)単純なアプローチが失敗し、可能であればPCLStorageを使用しないようにしたいと考えています。

+0

あなたの純粋な実装は、Windows 10デスクトップ上でuwpでうまくいきます。例えば、結果のfileinfoにアクセスできます。たとえば、Directory.FullNameでメッセージを表示します。おそらくそれはプロバイダーに依存しています。Windows 10では「This PC」(LOL) – vitalygolub

+0

です。そのFileInfoを開いてストリームを取得しようとするまでうまくいきます。 – Alberto

答えて

1

System.IO.FileおよびSystem.IO.FileInfoは、以前からUWPアプリケーションで使用可能でした。これらは新しい.Net標準2.0ではありません

StorageFileとFileInfoは同じことを行わず、一般的には互換性がありません。あなたは何のエラーが出ているのかは言えませんが、私の推測では、あなたのアプリケーションが使用しようとしているパスに直接アクセスすることができないため、AccessDeniedだと思います。

デフォルトでは、アプリケーションはApplicationDataとInstalledLocationsに直接ファイルアクセスできます。 System.IOを使用して、それらの場所に直接アクセスできます。ユーザーがアクセス権を与えられた他の場所にアクセスするには(File Picker経由で、暗黙的にパッケージ機能などで)、アプリケーションはStorageFileクラスとStorageFolderクラスを介してファイルブローカーを経由する必要があります。

IStorageHandleAccessから仲介Win32ファイルHANDLEを取得し、そこからSystem.IO.Fileを初期化できますが、FileInfoはHANDLEから構築する方法を提供しません。

+0

ファイルピッカーを介して問題のStorageFileを取得していますが、私はUWPサンドボックス化による制限を認識しています。問題はそれらのFileInfosからストリームを取得しています:StorageFileを開くことができますが、FileInfoをパスを使って構築し、開こうとすると例外(アクセス拒否)が発生します。 – Alberto

+1

FileInfoは仲介されたアクセス権を取得しません。アプリが直接書き込むことができる場所でのみ使用できます。他の場合は、StorageFileからストリーミングするか、IStorageHandleAccessを使用してSystem.IO.Fileを初期化する必要があります。 –

関連する問題