使用 URI 从“共享/传输”访问文件不再适用于 WP8 应用程序

本文关键字:文件 访问 不再 适用于 应用程序 WP8 传输 URI 共享 使用 | 更新日期: 2023-09-27 18:32:20

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

        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引用文件,但这似乎没有效果。

使用 URI 从“共享/传输”访问文件不再适用于 WP8 应用程序

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

音频

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

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

好的 - 我

找到了它 - 就我而言,问题是我的 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 ....);

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