Windows Mobile アプリに追加されたファイルのファイルパスを取得するにはどうすればよいですか?
-
22-08-2019 - |
質問
Windows Mobile アプリに wav ファイルを追加しました。それを再生するために CoreDll.dll の MobilePlaySound を使用したいと考えています。
fileName はそのパラメータの 1 つです。
MobilePlaySound(fileName, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_FILENAME));
新しいフォルダー「sound」を作成し、「start.wav」をプロジェクトに追加し、そのプロパティ「Build Action」を「Embedded Resources」に設定します。
次に、ファイル名を設定します。
fileName = "\\Program Files\\myApp\\sound\\start.wav";
しかし、音は全く鳴りません。では、正しいファイルパスは何でしょうか?
解決
ビルド アクションを「埋め込みリソース」に設定すると、ファイルはリソースとしてアセンブリにコンパイルされます。これは、wav ファイルが .exe または .dll ファイルに埋め込まれ、ファイル システムには表示されないことを意味します。このため、wav のファイル名をそれを必要とするメソッドに渡すことができません。
それを解決するには 2 つの方法があります。本当に wav ファイルを埋め込みリソースとして使用したい場合は、実行時にリソースを抽出してファイル システム内のファイルに書き込む必要があります。その後、そのファイルの名前を MobilePlaySound メソッドに渡すことができます。この場合、個人的にはこのソリューションを選択しません。
他の解決策は、 ない wav ファイルをリソースとして埋め込みますが、ファイル システム内で独自のファイルとして存続させます。これを実現するには、ビルド アクションを「コンテンツ」に設定し、「出力ディレクトリにコピー」設定を「常にコピー」または「新しい場合にコピー」のいずれかに設定します。これにより、コンパイラは出力にファイルを含めます。この場合、ファイルがどこにあるべきかについての仮定は正しいです。
要するに:
- ビルドアクション = "コンテンツ"
- 出力ディレクトリにコピー = 「常にコピー」または「新しい場合にコピー」