从FileActivated文件访问文件夹中的所有文件

时间:2015-07-31 08:32:08

标签: c# windows-runtime windows-10 win-universal-app

我在C#中编写了一个Windows 10 Universal App,就像默认的Photo App一样。 Photo App允许在用户使用Photo App打开文件的目录中显示所有图像。但是当用户使用我的应用程序打开文件时,我只获得FileActivatedEventArgs,允许显示用户打开的文件。我找不到解决方案来向用户显示此文件目录中的其他文件。我认为问题是获得访问该文件的权限,因为当文件的文件夹在图片库中时,它可以工作。但Windows Photo App可以在任何地方使用,所以我认为必须有一个解决方案......

编辑:我试图从我的项目中提取一个非常简单的示例代码,仅在几行代码中显示相关部分

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));
    }
}

2 个答案:

答案 0 :(得分:2)

是的,您没有该文件夹的访问权限。在这种情况下,GetParentAsync()可能会下降。 您应该使用“IFileActivatedEventArgsWithNeighboringFiles”来解析相邻文件。通过使用此接口,OS的文件代理进程将相邻文件传递给您。

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

注意 - 此API是从Win8.1添加的。并且,当FileActivated激活时,Win8.0版本的Photo应用程序无法显示相邻文件。 Photo应用程序的Win8.1版本可以使用此API。

答案 1 :(得分:0)

您可能需要将以下内容添加到Package.appxmanifest文件中,以便您可以访问图片库,然后您应该可以使其工作:

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