2015-07-31 5 views
2

Я пишу Windows 10 Universal App, как приложение для фотографий по умолчанию на C#. Приложение «Фото» позволяет отображать все изображения в каталоге, в котором пользователь открыл файл с помощью приложения «Фото». Но когда пользователь открыл файл с моим приложением, я получаю только файл FileActivatedEventArgs, который позволяет отображать файл, который пользователь открыл. Я не нашел решения, чтобы показать пользователю другие файлы из каталога этого файла. Я думаю, проблема заключается в том, чтобы получить разрешение на доступ к этим файлам, потому что, когда папка файла находится в библиотеке изображений, она работает. Но приложение Windows Photo может это повсеместно, поэтому я думаю, что должно быть решение ...Доступ ко всем файлам в папке из файла FileActivated

Редактировать: Я попытался извлечь очень простой пример кода из моего проекта, который отображает соответствующую часть только в нескольких строках кода

public static async Task<BitmapImage> LoadImage(StorageFile file) 
{ 
    BitmapImage bitmapImage = new BitmapImage(); 
    FileRandomAccessStream stream = (FileRandomAccessStream)await file.OpenAsync(FileAccessMode.Read); 
    bitmapImage.SetSource(stream); 
    return bitmapImage; 
} 

private async void setImages(FileActivatedEventArgs args) 
{ 
    StorageFile si = (StorageFile)App.args.Files.First(); 
    StorageFolder st = await si.GetParentAsync(); 
    StorageApplicationPermissions.FutureAccessList.Add(st); 
    IReadOnlyList<StorageFile> sflist = await st.GetFilesAsync(); 
    foreach (StorageFile sf in sflist) 
    { 
     imageList.Add(await LoadImage(sf)); 
    } 
} 
+0

В каком коде вы пытались отобразить дополнительные изображения? – BugFinder

+0

Я добавил образец кода, который он работает в библиотеке изображений с разрешением библиотеки изображений для приложения, но в других местах он не работает, вероятно, потому, что для приложения требуется разрешение на доступ к этим файлам ... но я не знаю, как я могу получить это разрешение ... – ctron

ответ

2

Да, у вас есть НЕТ права доступа к папке. В этом случае GetParentAsync() может упасть. Вы должны использовать «IFileActivatedEventArgsWithNeighboringFiles» для разбора соседних файлов. Используя этот интерфейс, процесс File Broker операционной системы передал вам соседние файлы.

https://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.activation.ifileactivatedeventargswithneighboringfiles

Примечание - Этот API был добавлен из Win8.1. И приложение Win8.0 ver of Photo не может отображать соседние файлы, когда оно было активировано FileActivated. Приложение Win8.1 ver of Photo может использовать этот API.

+0

Спасибо args.NeighboringFilesQuery.GetFilesAsync() работает отлично. Я не знаю, почему я не нашел этого простого решения. – ctron

0

вы можете добавить следующие строки в файл Package.appxmanifest, так что вы можете получить доступ к библиотеке Pictures, то вы должны быть в состоянии получить эту работу:

<Capabilities> 
    <uap:Capability Name="picturesLibrary"/> 
</Capabilities> 
+0

У меня это в моем файле Package.appxmanifest и да, он работает в библиотеке изображений, но если пользователь открывает фотографию за пределами Библиотеки изображений, например, на рабочем столе или на втором жестком диске, это не работает ... Мне нужно решение, работающее повсюду (приложение Windows Photo работает повсюду, поэтому оно должно быть возможным) – ctron

+0

Хорошо, тогда это странно, что это должно быть возможно, даже если FileOpenPicker сделал это сам, когда тестировал эту статью, я написал - http://www.microsoft.com/en-gb/developers/articles/week02jul15/preparing-your-windows-8-1-universal-apps-for-windows-10/ – RoguePlanetoid

+0

Если мое приложение открыто по файлу Я могу получить s, но я получу все файлы в папке (например, приложение Windows Photo), чтобы пользователь мог щелкнуть в приложении, чтобы перейти к следующей фотографии. Он работает в библиотеке изображений, а на съемном носителе он работает тоже, потому что тогда я могу добавить для этого разрешение на съемное хранилище. Но для рабочего стола или второго жесткого диска я не могу найти разрешение на решение этой проблемы ... и изображение на втором диске является обычным прецедентом, потому что у многих пользователей есть ssd с ограниченным объемом памяти в качестве первого диска ... – ctron

Смежные вопросы