【问题标题】:Playing wav file which has relative path inside project播放在项目中具有相对路径的 wav 文件
【发布时间】:2013-04-10 13:27:27
【问题描述】:

我在相对路径和 wav 文件的复制方面遇到了一些问题。我有这个完美运行的简单代码:

SoundPlayer player = new SoundPlayer();
player.SoundLocation = @"C:\Users\Admin\Documents\Visual Studio 2012\Projects\TestProject\TestProject\Data\Sounds\car.wav";
player.Play();

我想以某种方式使用相对路径播放该文件,但我没有成功:

SoundPlayer player = new SoundPlayer();
player.SoundLocation = @"Data\Sounds\car.wav";
player.Play();

谢谢!

【问题讨论】:

    标签: c# visual-studio-2012 wav relative-path soundplayer


    【解决方案1】:

    Data 目录是否在您的应用程序的根目录中? 您是否将目录内容复制为输出?

    如果是这样,您的意思是Data\Sounds\car.wav

    如果从 Visual Studio 运行,则在 [projectroot]\[release]\bin\Data\Sounds\car.wav

    如果您在 bin 文件夹中没有看到此目录,则需要确保选择了所有要复制到输出目录的文件(这将复制目录结构)。您可以通过单击项目中的文件并选择该文件作为输出来执行此操作。

    【讨论】:

    • 是的,数据在根目录下。
    • 不是根据在您的问题中有效的文件路径。
    • Hm ... 我通过在 TestProject 中添加新目录并右键单击 Project 并“添加新文件夹”来创建新的 Data 目录。不是根目录吗? :)
    • 编译后,你的root是你的bin\Debug或者bin\Release目录。
    【解决方案2】:

    使用Path.GetFullPath("relativ/path")获取文件的完整路径

    【讨论】:

      【解决方案3】:

      毕竟使用绝对路径可能会更好。您可以从 exe 文件中获取根路径,然后将您的相对路径附加到它。 像这样:

      // getting root path
      string rootLocation = typeof(Program).Assembly.Location;
      // appending sound location
      string fullPathToSound = Path.Combine(rootLocation, @"Data\Sounds\car.wav");
      player.SoundLocation = fullPathToSound;
      

      【讨论】:

      • 这对我不起作用 - Assembly.Location 包含附加到末尾的 .EXE,所以我最终得到了错误的 bin\Debug\Program.exe\Data\Sounds。跨度>
      【解决方案4】:
         //WindowsFormsApplication4.exe is name of name space this file name found in Debug file
      
       //you should copy your "sound.wav" into your Debug file
      
      
            string x = (Assembly.GetEntryAssembly().Location + "");
            x = x.Replace("WindowsFormsApplication4.exe", "sound.wav");
            SoundPlayer player1 = new SoundPlayer(x);
            player1.Play(); 
      

      【讨论】:

        【解决方案5】:

        这对我有用

        System.Media.SoundPlayer player1 = new System.Media.SoundPlayer(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\1.wav");
        

        【讨论】:

        • 感谢您的贡献。你能edit你的答案来解释这是如何解决原始问题的问题吗?
        猜你喜欢
        • 1970-01-01
        • 2011-09-19
        • 1970-01-01
        • 1970-01-01
        • 2016-08-03
        • 1970-01-01
        • 2014-05-23
        • 1970-01-01
        • 2013-04-14
        相关资源
        最近更新 更多