我有一个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
来引用文件,但这似乎没有效果。
答案 0 :(得分:0)
我所做的是我现在创建了一个全新的空WP8项目,然后我将WP7项目中的所有旧代码复制到这个新的WP8项目,然后我重新构建了解决方案。我没有对我撰写这篇文章时的版本进行任何代码修改,我从WP7项目转换为WP8并且存在问题。
音频播放器再次能够播放音频文件。
所以对任何拥有WP7项目的人都有建议:不要将它们在Visual Studio中转换为WP8项目,因为可能会发生奇怪的事情。
答案 1 :(得分:0)
好的 - 我发现我发现它 - 在我的情况下问题是我的BackgroundDowload需要一个Uri文件位置,我这样创建Uri:
fileName = "shared/transfers/my filename.txt";
fileName = Uri.EscapeUriString(fileName);
Uri fileUri = new Uri(fileName, UriKind.Relative);
无论有无上述代码的第二行,文件都会保存到转义字符串格式的位置。它似乎是这样的,因为它是作为Uri提供的。 该文件已下载,如您所述,它已创建并存在,如FileExists()所示。 我已经'转义'了fileName,当我想(例如)播放音频时,我会做这样的事情:
return new AudioTrack(new Uri(Uri.EscapedUriString(fileName), UriKind.Relative), title ....);
希望它可以帮助你,因为它对我有用。