0

嗨,我有一个 wpf 应用程序,可以在按钮单击等事件上播放声音。我现在拥有的当前代码播放声音文件,但我意识到它必须位于另一个文件夹中,例如如果用户删除,则应用程序几乎无法使用。我想知道,如果不在应用程序发布目录中创建一个全新的文件夹,我怎么能得到一个 .wav 文件。有任何想法吗?谢谢。

4

2 回答 2

0

将 .wav 文件作为嵌入式资源放入 dll 怎么样?

只需将文件添加到项目中,右键单击文件并将Build Action设置为Embedded Resource

然后您可以将 .wav 文件作为流加载并将其保存到光盘,如下所示:

private void WriteEmbeddedResourceToFile(string writePath, string assemblyName)
    {
        Assembly asm = Assembly.GetExecutingAssembly();
        Stream s = asm.GetManifestResourceStream(assemblyName);
        if (s != null)
        {
            var file = new byte[s.Length];
            s.Read(file, 0, (int)s.Length);
            File.WriteAllBytes(writePath, file);
            s.Close();
        }
    }

字符串assemblyName必须像这样设置:命名空间。(如果您将文件放在文件夹中,请在此处插入文件夹子路径).filename.wav

或者,您可以将其保存到光盘,直接使用流:

private byte[] GetEmbeddedResource(string assemblyName)
    {
        Assembly asm = Assembly.GetExecutingAssembly();
        Stream s = asm.GetManifestResourceStream(assemblyName);
        if (s != null)
        {
            var file = new byte[s.Length];
            s.Read(file, 0, (int)s.Length);
            s.Close();
            return file;
        }
    }

然后,当您要加载文件时,GetEmbeddedResource 将返回字节数组。

于 2012-05-18T05:54:08.547 回答
0

如果将 .wav 文件添加到项目的根目录,然后标记为内容(右键单击 .wav 文件并单击属性。然后将构建操作更改为内容),那么它将直接复制到根输出文件夹

您可以在代码或 XAML 中引用 wav 文件作为相对路径(简单的“Myfile.wav”)

我相信这就是你的要求?

于 2012-05-18T05:45:52.697 回答