0

我有一个在 WP7 和 WP8 设备上成功运行的 WP7 应用程序。在应用程序中,我使用该BackgroundFileTransfer服务下载音频文件并将文件存储到文件shared/transfers夹中。然后,我通过为下载的文件位置提供 URI 来创建AudioTracks。

        Uri episodeLocation;
        try
        {
            using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication())
            {
                Debug.WriteLine(" *** Creating track, file exists: " + iso.FileExists("shared/transfers/song.mp3"));
            }
            episodeLocation = new Uri("shared/transfers/song.mp3", UriKind.Relative);
        } catch(Exception) {
            return null;
        }

        return new AudioTrack(episodeLocation,
                        "Track name",
                        "Album name",
                        "",
                        new Uri("/path/to/logo", UriKind.Relative));

这适用于 Windows Phone 7 和 Windows Phone 8 设备- 音频播放器能够很好地播放曲目。如果文件存在,调试输出True将作为测试结果打印。

我现在已将 Visual Studio 2012 中的应用程序转换为 Windows Phone 8 应用程序。如果我现在在 Windows Phone 8 中运行该应用程序,我会收到System.IO.FileNotFoundException来自播放器的外部异常。True同样在转换后的版本中,在检查文件是否存在时会打印调试输出。

我只是将应用程序从 WP7 转换为 WP8 应用程序,我无法再引用文件shared/transfers

为什么?

这样做的正确方法是什么?

我已经尝试使用 URI 来引用文件,isostore:/shared/transfers/song.mp3但这似乎没有效果。

4

2 回答 2

0

我所做的是我现在创建了一个全新的空 WP8 项目,然后我将所有旧代码从 WP7 项目复制到这个新的 WP8 项目,然后我重新构建了解决方案。我没有对我写这篇文章时的版本进行任何代码修改,我从 WP7 项目转换为 WP8 并且有问题。

音频播放器再次能够播放音频文件。

所以对任何有 WP7 项目的人的建议:不要在 Visual Studio 中将它们转换为 WP8 项目,因为可能会发生奇怪的事情。

于 2013-09-24T09:14:31.683 回答
0

好的 - 我觉得我找到了 - 在我的情况下,问题是我的 BackgroundDowload 需要一个 Uri 文件位置,我这样创建 Uri:

fileName = "shared/transfers/my filename.txt";
fileName = Uri.EscapeUriString(fileName);
Uri fileUri = new Uri(fileName, UriKind.Relative);

无论有没有上述代码的第二行,文件都会保存到转义字符串格式的位置。似乎是这样,因为它是作为 Uri 提供的。该文件已下载,正如您所提到的,它已创建并存在,如 FileExists() 所示。我有我的“转义”文件名,当我想(例如)播放音频时,我会这样做:

return new AudioTrack(new Uri(Uri.EscapedUriString(fileName), UriKind.Relative), title ....);

希望它对你有用,因为它对我有用。

于 2013-09-28T18:50:59.823 回答