2010-12-13 15 views
-2

J'espérais que le code ci-dessous jouerait le fichier Fireball.wav situé dans le même répertoire que le fichier .exe..NET SoundPlayer QUestion

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

Je crois que je suis en train de configurer le mauvais chemin de fichier.

+0

Eh oui, vous n'avez pas utilisé réellement un chemin. OpenFileDialog.RestoreDirectory a tendance à être pertinent. –

+2

-1 Comment cette question est différente de celle-ci: http://stackoverflow.com/questions/4433834 ou même celle-ci: http://stackoverflow.com/questions/4405477 ??? Devons-nous continuer à deviner jusqu'à ce que nous sachions dans quel dossier se trouve votre Fireball.wav? Ou essayez-vous de le faire dans une application web et ne pas poser tout à fait raison? –

+0

également, il s'agit d'un problème .NET SoundPlayer, pas un problème C# SoundPlayer. –

Répondre

3

Vous pouvez faire quelque chose comme ceci:

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

+1. Rendez-nous heureux avec Path.Combine() –

+0

OK, Path.Combine() ajouté. –

+0

Cela est correct mais suppose que le fichier est local à l'application. S'il vous plaît vérifier mon commentaire snarky à l'OP et les liens. Je me demande si le PO est confus entre les dossiers relatifs dans le monde Web et les chemins dans les applications de bureau? –

0

En utilisant des chemins relatifs sans chemin d'accès de base spécifié (. I.e. par rapport au répertoire courant) est généralement une mauvaise idée.
La seule exception commune dont je puisse parler est les chemins relatifs passés en tant que paramètre de ligne de commande dans une application.

En particulier le répertoire courant n'est pas identique au répertoire de l'application. Il peut s'agir de n'importe quel répertoire au démarrage, et les boîtes de dialogue communes (en fonction de leurs indicateurs) peuvent le modifier. De plus, il s'agit d'un processus par processus et non par variable de thread, un autre thread peut donc le modifier à tout moment.

Je recommande fortement la création d'un chemin absolu de votre chemin relatif avant d'y accéder (voir le poste de Dog Ears pour savoir comment faire)