C# 从访问文件;“共享/转让”;使用URI不再适用于WP8应用程序

C# 从访问文件;“共享/转让”;使用URI不再适用于WP8应用程序,c#,audio,windows-phone-8,C#,Audio,Windows Phone 8,我有一个在WP7和WP8设备上成功运行的WP7应用程序。在应用程序中,我使用BackgroundFileTransfer服务下载音频文件,并将文件存储到shared/transfers文件夹中。然后,我通过为下载的文件位置提供一个URI来创建AudioTracks Uri情节定位; 尝试 { 使用(IsolatedStorageFile iso=IsolatedStorageFile.GetUserStoreForApplication()) { Debug.WriteLine(“***正在创建

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

Uri情节定位;
尝试
{
使用(IsolatedStorageFile iso=IsolatedStorageFile.GetUserStoreForApplication())
{
Debug.WriteLine(“***正在创建曲目,文件存在:”+iso.FileExists(“shared/transfers/song.mp3”));
}
eposodelocation=newURI(“shared/transfers/song.mp3”,UriKind.Relative);
}捕获(例外){
返回null;
}
返回新的音轨(插曲位置,
“曲目名称”,
“专辑名”,
"",
新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应用程序,无法再引用
共享/传输中的文件

为什么?

正确的方法是什么


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

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

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


因此,对任何拥有WP7项目的人都有一个建议:不要在VisualStudio中将它们转换为WP8项目,因为可能会发生一些奇怪的事情

好的-我发现我找到了它-在我的情况下,问题是我的BackgroundDowload需要一个Uri文件位置,我创建的Uri如下:

fileName = "shared/transfers/my filename.txt";
fileName = Uri.EscapeUriString(fileName);
Uri fileUri = new Uri(fileName, UriKind.Relative);
return new AudioTrack(new Uri(Uri.EscapedUriString(fileName), UriKind.Relative), title ....);
无论是否有上面的第二行代码,文件都会保存到转义字符串格式的位置。看起来是这样的,因为它是作为Uri提供的。 文件已下载,如您所述,它已创建并存在,如FileExists()所示。 我有我的“转义”文件名,当我想(例如)播放音频时,我会这样做:

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

希望对您有所帮助。

事实上,将音频文件移动到任何其他目录甚至根目录都会产生相同的结果:FileExists()返回true,但音频播放器抛出FileNotFound异常。在我的情况下,我的文件名中没有空格,所以我们的情况明显不同,空白是这里唯一的例子。尝试一下,同时检查字符串[]str=ISF.GetFileNames(“/shared/transfers/”);返回。如果您在返回的文件名(str)中没有任何特殊字符,那么我不知道(目前)什么可以解决您的问题。您是否将转换的.csproj与新创建的进行了比较?有什么不同?我没有比较。我没有时间修复微软的漏洞。没有人在谈论修复漏洞,这只是好奇:)没关系