Невозможно извлечь файл из FutureAccessList, если я использую getFileAsync вместо Picker.pickSingleFileAsync
У меня есть приложение, которое извлекает файлы двумя способами: одно с помощью средства выбора файлов, а другое - напрямую. В обоих случаях я получаю файл, добавляю его в будущий список доступа и сохраняю токен в массиве. Позже в приложении я использую токен для извлечения файла, используя futureAccessList.getFileAsync
, Теперь вторая половина, то есть возврат файла с использованием токена-кода, идентична в обоих случаях, поэтому это должно быть что-то вроде того, как я добавляю его в будущий список доступа, потому что это работает, когда я использую средство выбора файлов, но не когда я использую путь напрямую.
Filepicker добавить код
// Create the picker object and set options
var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
openPicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.musicLibrary;
// Select MIDI files only
openPicker.fileTypeFilter.replaceAll([".mp3"]);
// Open the picker for the user to pick a file
openPicker.pickSingleFileAsync().then(function (file) {
if (file) {
// Application now has read/write access to the picked file
WinJS.log && WinJS.log("Picked file: " + file.name, "sample", "status");
// Store the file to access again later
var listToken = Windows.Storage.AccessCache.StorageApplicationPermissions.futureAccessList.add(file);
// Save the file mapping. If it exists, overwrite.
fileMappings[padId] = { padNumber: padId, audioFile: listToken };
}
else {
// The picker was dismissed with no selected file
WinJS.log && WinJS.log("Operation cancelled.", "sample", "status");
}
});
Прямой путь добавить код
Windows.Storage.KnownFolders.musicLibrary.getFileAsync("filename.mp3").then(function (file) {
if (file) {
// Application now has read/write access to the picked file
WinJS.log && WinJS.log("Picked file: " + file.name + ", full path: " + file.path, "sample", "status");
// Store the file to access again later
var listToken = Windows.Storage.AccessCache.StorageApplicationPermissions.futureAccessList.add(file);
// Save the file mapping. If it exists, overwrite.
fileMappings['pad0'] = { padNumber: 'pad0', audioFile: listToken };
}
else {
// Could not get access to the file
WinJS.log && WinJS.log("File unavailable!", "sample", "status");
}
});
Лично я чувствую, как эта линия (Windows.Storage.KnownFolders.musicLibrary.getFileAsync)
не дает мне права на чтение и запись, просто на чтение, и это может быть тем, что все портит. Вот связанная тема на MSDN. Это вопрос C#-MediaElement, но тесно связанный. Есть идеи, что здесь может быть не так? Если это связано с разрешениями, как я могу указать, что мне нужен доступ rw? Я думал, что определение возможностей в appxmanifest было достаточно хорошим. Я могу добавить код поиска файла здесь, если это кому-нибудь нужно. Спасибо за ваше время.
Приложение Windows RT с использованием Javascript. Подтверждена возможность "Музыкальной библиотеки".]
1 ответ
Ваш код правильный. Это ошибка в WinRT API. Я работаю над этой частью системы и подал ошибку на эту тему.