Как да се справите с активирането на файлове в Windows Store / WinJS приложения

Опитвам се да накарам приложението ми за текстов редактор да обработва стартиране на файл. Microsoft има пример как да направите това тук:

http://msdn.microsoft.com/en-us/library/windows/apps/hh452684.aspx

За съжаление, той спира в момента на получаване на файла и не дава никаква информация за това как всъщност да се отвори въпросният файл.

Мога успешно да се справя с активираното събитие и в крайна сметка получавам абсолютен път до файла. Например,

C:\Users\Rory\Documents\test.txt

Приложенията на Metro нямат разрешение за достъп до абсолютни пътища, освен при определени условия.

  1. ако файлът е избран от потребителя чрез инструмент за избор на файл
  2. ако приложението е имало достъп до файла преди и пътят е бил съхранен в Windows.Storage.AccessCache
  3. ако на приложението се предава файлът като стартиране.

Въпреки че номер 3 се прилага в този случай, не мога да отворя файла.

Опитах Windows.Storage.StorageFile.getFileFromPathAsync(path_to_file), но получавам тази грешка

0x80070005 - JavaScript runtime error: Access is denied.

WinRT information: Cannot access the specified file or folder (඀6). 
The item is not in a location that the application has access to (including 
application data folders, folders that are accessible via capabilities 
and persisted items in the StorageApplicationPermissions lists). Verify 
that the file is not marked with system or hidden file attributes.

Вече съм настроил манифеста на пакета на приложението си да приема txt файлове.


person roryok    schedule 05.10.2013    source източник


Отговори (1)


StorageFile или StorageFiles се предават на вашето приложение в аргумента WebUIFileActivatedEventArgs. Опитайте тази:

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.file) {
        if (args.detail.files.size > 0) {
            var storageFile = args.detail.files[0];
            Windows.Storage.FileIO.readTextAsync(storageFile).then(function (text) {
                // Do something with the content of the file.
            });
        }
    }

    // ...
} 
person kiewic    schedule 05.10.2013