0

情况

这可能是一个非常简单的问题,答案非常简单,但是我在任何地方都找不到答案,所以我要在这里问,我一直在解决这个问题,因为这对我来说不是一个大问题,但这将是我提交作品的时候。

问题

我有一个声音播放器,它在我的电脑上运行良好,并且完全符合我在这台电脑上的要求。

SoundPlayer player = new SoundPlayer(@"C:\Users\Font\Desktop\GRADED_UNIT_SOLUTION_PLANNING_UPDATED\HillRacingGraded\HillRacingGraded\Resources\Audio\" + track + ".wav");

问题是路径。

由于这条路径,我的程序将无法在任何其他系统上运行,除了它现在正在运行的系统。它在启动后很快崩溃。

而且..正如您可能从路径中看到的那样,它最终会被评分,所以我的讲师将需要使用这个程序而无需切换目录。

如何让 Soundplayer 路径从“HillRacingGraded\ ...\ ...”开始?

而不是从 C: 驱动器开始。

4

1 回答 1

0

如果您使用 System.Media.SoundPlayer,它支持从流中读取声音文件,并且我已经看到它在过去从嵌入式资源获得的 UnmanagedResourceStream 中成功使用。因此,一种选择是将您的声音文件作为资源嵌入到您的应用程序中并从那里播放。

如果嵌入文件不是一个选项,您可以使用类似于下面显示的代码获取相对于可执行文件夹的路径。然后,您只需在子目录中提供可执行文件和资源文件(但如果您的代码有可能位于 DLL 中并且可以由任意可执行文件托管,请小心使用 GetExecutingAssembly())。

var assembly = Assembly.GetExecutingAssembly();
var folder = Path.GetDirectoryName(assembly.Location);
var soundFile = Path.Combine(folder, "MySoundFile.wav");

特殊的文件夹路径助手也可以减少硬编码,但当您的应用程序将通过安装程序安装并且您可以自动将文件放在适当的位置时效果最佳(学校项目不太可能出现这种情况)。

于 2015-05-11T02:10:07.163 回答