WinRT アプリで mp3 ファイルにアクセスする際の問題。
「System.UnauthorizedAccessException」は、アプリが FileOpenPicker によって返されたファイルと同じフォルダー内の名前で mp3 ファイルを開こうとすると発生します。別の言い方をすれば、ユーザーは mp3 ファイルと同じ名前のドキュメント内の情報ファイルを選択します。アプリは情報ファイルを正常に開きますが、mp3 ファイルを開くことができません。
例: ファイル (file1.info) と (file1.mp3) のペアがあります。ファイルピッカーを使用すると、(*.info) ファイルを選択できます。
ユーザーは (file1.info) を選択します。その後、アプリは (file1.info) と (file1.mp3) の両方を開きます。どちらのファイルも DocumentsLibrary フォルダーにありますが、MusicLibrary にはありません。問題は、(file1.mp3) を開こうとすると、「UnauthorizedAccessException」が発生することです。
問題を事前に解決するには:
ファイル: mp3 ファイルをドキュメントにコピーします。mp3 ファイルと同じベース名でテキスト ファイルを作成し、その拡張子を .info に変更します。
Package.appxmanifest > Declarations で、'File Type Associations' 宣言を追加します。「Open is safe」にチェックを入れます。追加
サポートされているファイル タイプ「.mp3」および「.info」。「コンテンツ タイプ」は空のままにします。
コード:
Dim file as StorageFile
Dim fileopenpicker As FileOpenPicker
Dim infofile As StorageFile
Dim mp3file As StorageFile
Dim filename As String
fileopenpicker = New FileOpenPicker()
fileopenpicker.FileTypeFilter.Add(".info")
fileopenpicker.FileTypeFilter.Add(".mp3")
fileopenpicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary
file = Await fileopenpicker.PickSingleFileAsync()
If file.Path.EndsWith(".info") Then
infofile = file
filename = file.Path.Substring(0, file.Path.Length - 4) & "mp3"
' This command fails with 'System.UnauthorizedAccessException'
mp3file = Await StorageFile.GetFileFromPathAsync(filename)
Else 'file is an mp3 file
mp3file = file
filename = file.Path.Substring(0, file.Path.Length - 3) & "info"
' This command succeeds!
infofile = Await StorageFile.GetFileFromPathAsync(filename)
End If
そのため、ファイルが fileopenpicker によって実際に選択されていない場合、mp3 ファイルを開く際に特定の問題があるようです。