如何从IsolatedStorage获取ShareMediaTask的文件路径

时间:2013-06-17 00:49:42

标签: c# windows-phone-8 isolatedstorage

我使用CameraCaptureTask捕获图像并将它们保存到IsolatedStorage。然后我填充一个列表框,在我的MainPage上用这些保存的图像命名为recent。然后我想使用ShareMediaTask来共享其中一个图像。但是,对于我遇到问题的ShareMediaTask的要求是从IsolatedStorage获取图像的文件路径。我正在做的是使用列表框的SelectionChanged事件处理程序来确定用户选择共享的图像。然后,在按钮单击事件上,我在IsolatedStorage中搜索以从列表框中检索所选图像的完整路径。即使显示完整路径,ShareMediaTask也永远不会完成。

MainPage.xaml.cs中

//The `recent` ListBox's SelectionChanged event
private void recent_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        //retrieve the name of the image that was autogenerated by CameraCaptureTask completed event
        fileName = capturedPicture.FileName;
        //Combine the directory and file name
        filePath = Path.Combine(PictureRepository.IsolatedStoragePath, fileName);
    }

private void Share()
    {
        if(fileName != null)
        {
            var isoFile = IsolatedStorageFile.GetUserStoreForApplication();

            //use the path to open the picture file from the isolated storage by using the IsolatedStorageFile.OpenFile method
            var fileStream = isoFile.OpenFile(filePath, FileMode.Open, FileAccess.Read);
            string name = fileStream.Name;

            _shareTask = new ShareMediaTask();
            _shareTask.FilePath = name;
            _shareTask.Show();
        }            
    }

在通过按钮点击事件调用的Share()方法中,我想在IsolatedStorage中获取图像的完整路径的唯一方法是使用允许我访问的IsolatedStorageFile.OpenFile方法fileStream.Name。似乎仍然无效。

2 个答案:

答案 0 :(得分:1)

您无法与隔离存储共享,因为只能访问您的应用。在您的情况下,您应首先将图片保存到媒体库(除非它们自动保存在那里),然后您应该使用媒体库的路径,而不是您自己的路径。与您的情况非常相似的情况描述为here in MSDN

答案 1 :(得分:0)

每个应用程序都是沙盒。即隔离存储是为每个应用程序分配的内存,用于存储其应用相关数据。其他应用程序无法访问存储在独立存储中的数据。从iso存储中保存和检索数据文件的方式与文件浏览器稍有不同。 如果将图像文件保存到媒体库,则可以进行此类访问。

启动器和选择器是为此目的提供的选项。