Невозможно извлечь файл из 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. Я работаю над этой частью системы и подал ошибку на эту тему.

Другие вопросы по тегам