在metro应用程序中打开媒体文件

时间:2013-06-10 17:09:34

标签: c# windows-8 windows-runtime

它给我一个未找到的文件异常?内部资产我有“beep.wav”,但没有工作。 visual studio 2012\Projects\Myproject\Myproject\Assets

private async void beep()
{
    MediaElement snd = new MediaElement();
    StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync("Assets");
    StorageFile file = await folder.GetFileAsync("beep.wav");
    var stream = await file.OpenAsync(FileAccessMode.Read);
    snd.SetSource(stream, file.ContentType);
    snd.Play();
}

上面的代码确实有用,我只需要手动将它添加到项目中....

2 个答案:

答案 0 :(得分:1)

当您运行应用程序时,Package.Current.InstalledLocation将不是您的项目所在的目录(visual studio 2012 \ Projects \ Myproject \ Myproject \ Assets),而是应用程序部署到的目录(它可能类似于visual studio 2012\Projects\Myproject\Myproject\bin\Debug\AppX\Assets)。

因此,如果您只是手动将wav文件复制到项目的Assets目录中,它就不会起作用,因为您的应用程序将在部署位置查找它。

您注意到在将wav文件添加到项目后它可以正常工作,但是将文件添加到项目中并不正是使它工作的原因。如果您将文件添加到Windows应用商店项目,并在文件的属性中将构建操作设置为内容,则该文件将获得已复制到应用的已部署位置。

您不必手动将此文件的Build Action设置为Content,因为VS会自动为某些文件类型(如wav)执行此操作,因此,该文件已复制到已部署的位置。

答案 1 :(得分:0)

您应该使用以下代码

访问存储在Asset文件夹中的文件
 var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/beep.wav"));