2010-12-13 2 views
-2

Я надеялся, что приведенный ниже код будет воспроизводить файл Fireball.wav, расположенный в том же каталоге, что и .exe..NET SoundPlayer QUESTION

SoundPlayer simpleSound = new SoundPlayer(@"Fireball.wav"); 
simpleSound.Play(); 

Я считаю, что я настраиваю неправильный путь к файлу.

+0

Да, вы на самом деле не использовать путь. OpenFileDialog.RestoreDirectory имеет тенденцию быть актуальным. –

+2

-1 Как этот вопрос отличается от этого: http://stackoverflow.com/questions/4433834 или даже этот: http://stackoverflow.com/questions/4405477 ??? Должны ли мы продолжать гадать, пока не выясним, в какой папке находится ваш Fireball.wav? Или вы пытаетесь сделать это в веб-приложении и не спрашиваете совершенно правильно? –

+0

также, это проблема .NET SoundPlayer, а не проблема с C# SoundPlayer. –

ответ

3

Вы можете сделать что-то вроде этого:

var path = Path.Combine(
       Path.GetDirectoryName(Application.ExecutablePath) 
      ,"Fireball.wav"); 
SoundPlayer simpleSound = new SoundPlayer(path); 
simpleSound.Play(); 
+3

+1. Сделайте нас счастливыми с Path.Combine() –

+0

OK, Path.Combine() добавлено. –

+0

Это нормально, но предполагает, что файл является локальным для приложения. Пожалуйста, проверьте мой snarky комментарий к OP и ссылкам. Заставляет меня задаться вопросом, запутан ли OP между относительными папками в веб-мире и путями в настольных приложениях? –

0

Используя относительные пути без указанного базового пути (. То есть по отношению к текущему каталогу), как правило, плохая идея.
Единственное общее исключение, которое я могу сделать, это относительные пути, переданные в качестве параметра командной строки в приложение.

В частности, текущий каталог не идентичен каталогу приложения. Это может быть любой каталог при запуске, а общие диалоги (в зависимости от их флагов) могут изменить его. Кроме того, это процесс, а не переменная потока, поэтому другой поток может изменить его в любое время.

Поэтому я настоятельно рекомендую создать абсолютный путь от своего относительного пути перед доступом к ней (см пост Кинологические Уши для как сделать это)