2010-12-13 8 views
-2

以下のコードが.exeと同じディレクトリにあるFireball.wavファイルを再生することを期待していました。.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がどのフォルダにあるのか把握するまで、推測を続けていますか?それとも、Webアプリでこれをやろうとしているのですか? –

+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

これは問題ありませんが、ファイルがアプリケーションのローカルであることを前提としています。 OPとリンクへの私のsnarkyコメントをチェックしてください。 OPがWeb世界の相対的なフォルダとデスクトップアプリケーションのパスの間で混乱しているのではないかと思うのですか? –

0

を(すなわち、現在のディレクトリからの相対。)通常は悪い考えです。
私ができることの1つの共通の例外は、アプリケーションにコマンドラインパラメータとして渡される相対パスです。

特に、現在のディレクトリはアプリケーションディレクトリと同一ではありません。これは起動時の任意のディレクトリにすることができ、一般的なダイアログ(フラグに依存)はそれを変更することができます。さらに、スレッドごとの変数ではなく、プロセスごとであるため、別のスレッドがいつでも変更する可能性があります。

は、だから私は非常にそれにアクセスする前に、あなたの相対パスから絶対パスを作成することをお勧めし