FileOpenPicker + Facebook + OpenAsync抛出FileNotFoundException

时间:2012-11-16 11:18:57

标签: c# xaml windows-8 microsoft-metro

我遇到FileOpenPicker(ModernUI xaml / c#)的问题,因为从网上挑选的一些图片返回“StorageFile”没有错误,但是当我尝试用OpenAsync打开它时系统会抛出FileNotFoundException。特别是我注意到,这种情况一直发生在从Facebook拿起旧照片的情况下。

使用SDK Sample app "XAML images sample"很容易重现该问题。只需启动应用程序并从“Facebook”中获取一些图片并确保获取一些旧图片,因为我注意到最新的图片正好打开。

更具体地说,请找到实际抛出异常的代码的和平:

    // Open a stream for the selected file
    StorageFile file = await open.PickSingleFileAsync();

    // Ensure a file was selected
    if (file != null)
    {
        // Ensure the stream is disposed once the image is loaded
        // !!! Here exception is thrown if you pickup some old file from facebook !!!
        using (IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
        {
            // Set the image source to the selected bitmap
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.DecodePixelHeight = decodePixelHeight;
            bitmapImage.DecodePixelWidth = decodePixelWidth;

            await bitmapImage.SetSourceAsync(fileStream);
            Scenario2Image.Source = bitmapImage;
        }
    }

提前感谢您的建议和帮助

亲切的问候

MG

1 个答案:

答案 0 :(得分:0)

好的,所以在这里:)

当您下载文件并将其保存在光盘上的某个位置时,您无法在关闭它之后将其打开,因为位置不在应用程序功能中并且请记住Windows应用商店应用程序是沙箱,因此他们只能得到能力。

您可以通过两种方式解决这个“问题”。

1)将文件保存在您的应用可以访问的其中一个位置: - >文件库 - >音乐库 - >视频库 - >图像库 - >本地应用程序目录

可以在您的应用始终可访问的本地应用目录的功能中设置库。从这些目录中,您可以轻松打开文件

2)保存访问缓存中的文件路径 你可以这样做

StorageApplicationPermissions.FutureAccessList.AddOrReplace(fol.GetHashCode().ToString(), fol);

之后,您可以访问该目录,即使它不在您的功能位置,但请记住缓存可以包含1000个目录