2016-04-26 6 views
0

私のパッケージに含まれているリソースをロードする正しい方法を理解しようとしています。これに似た質問がいくつかあります(例:Unable to access Asset files in Metro app)。可能であれば、手動で任意のms-appx:\\\パスを作成する必要はありません。OpenStreamForReadAsyncは、ルートから "The Parameter is Incorrect"で失敗する

// The location of everything in my package. 
StorageFolder packageLocation = Package.Current.InstalledLocation; 
// The folder I want to load a file from 
StorageFolder resources = await packageLocation.GetFolderAsync("Resources"); 

// I can successfully find the file, and then open a stream. 
StorageFile file = await resources.GetFileAsync("Default.xml"); 
Stream streamFromFile = await file.OpenStreamForReadAsync(); 

// Also, I can just directly open a stream for the file from the folder. 
Stream streamFromFolder = await resources.OpenStreamForReadAsync("Default.xml"); 

// Error: The parameter is incorrect 
Stream streamFromRoot = await packageLocation.OpenStreamForReadAsync("Resources/Default.xml") 

私は./Resources/.../Resources/...ms-appx:///Resources/...を含む多くの組み合わせを試してみました。なぜそれはルートフォルダからは機能しませんか?

注:まだ確認していませんが、ApplicationData.Current.LocalFolderなどの他の「ルート」フォルダでも同じ問題があるようです。

答えて

1

次の構文でテストしてください。

var file = await packageLocation.GetFileAsync(@"Resources\Default.xml"); 

またはストリームとして

var stream = await packageLocation.OpenStreamForReadAsync(@"Resources\Default.xml"); 
+0

この瞬間に私が感じる完全かつ完全な怒りは、限界を知りません。ありがとう、とUWP APIからの厄介なエラーのための1つをチョーク。 –

0

使用して、私は問題をスラッシュ他のいくつかのシナリオを指摘したかったジャンセバスチャンが提供する答えをフォローアップ。

StorageFile.GetFileFromApplicationUriAsync APIを使用する場合、接頭辞はms-appx:///のURIパラメータを使用できます。

var uri = new Uri(@"ms-appx:///Resources\DefaultPickerView.xml"); 
var file1 = await StorageFile.GetFileFromApplicationUriAsync(uri); 

URIを作成すると、バックスラッシュはすべてスラッシュに変換されます。

一方、使用した接頭辞とスラッシュの組み合わせに関係なく、私はStorageFile.GetFileFromPathAsyncをまったく動作させることができませんでした。ただし、GetFileFromPathAsync MSDN documentationは、パスにスラッシュを使用できないことを示しています。

関連する問題