3

Visual Studio 2010で新しいプロジェクトを作成しました。これはWindowsフォームであり、.NETFramework4クライアントプロファイルを使用して実行されます。

埋め込みWAVサウンドファイルを追加しました。

私がしたいのは、それをあるパスにコピーすることだけです。たとえば、デスクトップを例に挙げます。どうすればこれを達成できますか?

私はすでにこれらを試しました:

リソースからファイルをコピーする方法は?

リソースからファイルを読み取り、C#でディスクに書き込みます

アセンブリリソースストリームからディスクへのファイルの書き込み

しかし、私はいつも問題に直面しています。例えば:

Take Over Control.wavという名前のオーディオリソースを追加すると、。という名前で追加されTake_Over_Controlます。次に、メインフォームに「コピー」というボタンを追加するだけです。次に、そのボタンのクリックイベントには次のようになります。

private void ButtonCopyClick(object sender, EventArgs e)
{
    Stream resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("Take_Over_Control");
    if (resource == null)
    {
        throw new ArgumentException();
    }
    Stream output = File.OpenWrite(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)+"\\Sound.wav");
    resource.CopyTo(output);
}

事は...私がその部分にTake_Over_ControlまたはResources.Take_Over_ControlまたはProperties.Resources.Take_Over_Controlなどを入れてもGetManifestResourceStream、私は常に立ち往生しているthrow new ArgumentException();ので、それはそれを意味し、それresourcenullオンラインでうまく割り当てられていませんStream resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("Take_Over_Control");

そして、私が試した他の方法には問題があります。ここの何が問題になっていますか?この埋め込まれたオーディオファイルを正しい方法でコピーする方法!?

4

4 に答える 4

2

まず、WAVファイルが「BuildAction」プロパティの下の埋め込みリソースであることを確認しましたか?その場合、WAVファイルへのパスが間違っている可能性があります。この線...

Stream resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("Take_Over_Control");

する必要があります

Stream resource = Assembly.GetExecutingAssembly().GetManifestResourceStream("myProject.resources.Take_Over_Control.wav");

myProjectはプロジェクトの名前であり、resourcesはWAVファイルが保存されているフォルダーです。したがって、これがwavファイルへのパスである場合は上記のコードが適用されます... "c:\ myProject \ resources \ Take_Over_Control.wav

お役に立てば幸い

于 2012-04-19T01:18:21.017 に答える
1

Resources.Designer.csファイルを検索すると、ResourceManager.GetStream ...が表示されたので、クリックイベントでこれを使用します。

Stream resource = Properties.Resources.ResourceManager.GetStream("Take_Over_Control");
if (resource == null)
{
    throw new ArgumentException();
}
Stream output = File.OpenWrite(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)+"\\Sound.wav");

そしてそれはWAVファイルをデスクトップにコピーするという正しい仕事をするだけです。そしてまた...今私は反射から解放されています!

WAVファイルがVisualStudio2010 C#.NET Framework 4クライアントプロファイルプロジェクトに追加されると、として保存されず、として保存されることに注意しbyte[]UnmanagedMemoryStreamください。このため、それをビアに変換するか、単にビアbyte[]に入れる必要があり、方法は短くなります!StreamResourceManagerResourceManager

于 2012-04-19T15:09:13.163 に答える
0

あなたはする必要はありません:Properties.Resources.ResourceManager.GetStream

VS.NETのリソースエディタを使用している場合は、wavファイルをそこにドラッグするだけです。次に、Resourcesクラスが生成されます。

Resources.MySoundそこから、ストリームをにコピーする必要がありますFileStream

var path = "c:\\temp\\MySound.wav";
using (var fs = new FileStream("c:\\temp\\sound.wav", FileMode.Create))
{
   Resources.MySound.CopyTo(fs);
}
Process.Start(path);
于 2012-04-19T06:41:17.083 に答える
0

このコードは、リソースに対してnullになる場合があります。

Stream resource = Properties.Resources.ResourceManager.GetStream("ResourceFileName");

ただし、このコードの代わりにこのコードを使用して、リソースをストリーム変数に返すことを許可することができます

Stream resource = Properties.Resources.ResourceManager.GetStream("ResourceFileName") 
于 2013-03-07T16:46:17.617 に答える