32

ビルドアクションが「リソース」に設定されているC#WPFアプリにイメージがあります。これはソースディレクトリ内の単なるファイルであり、ドラッグアンドドロップのプロパティダイアログを介してアプリのリソースコレクションに追加されていません。ストリームとして書き込もうとしていますが、ドット、スラッシュ、名前空間など、さまざまなバリエーションを試しても、開くことができません。

「pack:// application:,,, / Resources / images / flags / tr.png」を使用してxamlの他の場所で使用するためにアクセスできますが、それを含むストリームを取得できません。

ほとんどの場所は使用を言うようです

using(BinaryReader reader = new BinaryReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("ResourceBlenderExpress.Resources.images.flags.tr.png"))) {
    using(BinaryWriter writer = new BinaryWriter(File.OpenWrite(imageFile))) {
        while((read = reader.Read(buffer, 0, buffer.Length)) > 0) {
            writer.Write(buffer, 0, read);
        }
        writer.Close();
    }
    reader.Close();
}

運がなかった。

4

4 に答える 4

34

あなたはおそらく探しているApplication.GetResourceStream

StreamResourceInfo sri = Application.GetResourceStream(new Uri("Images/foo.png"));
if (sri != null)
{
    using (Stream s = sri.Stream)
    {
        // Do something with the stream...
    }
}
于 2009-09-07T08:06:21.363 に答える
29

GetManifestResourceStream は、従来の .NET リソース、つまり RESX ファイルで参照されるリソース用です。これらは WPF リソースと同じではありません。つまり、リソースのビルド アクションで追加されたものです。これらにアクセスするには、 Application.GetResourceStreamを使用して、適切な pack: URI を渡す必要があります。これは、リソースのデータにアクセスするための Stream プロパティを持つ StreamResourceInfo オブジェクトを返します。

于 2009-09-07T08:10:18.230 に答える
8

正確な名前がわからないため、リソース ストリームを開くのに問題がありますか? もしそうなら、あなたは使うことができます

System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames()

含まれているすべてのリソースの名前のリストを取得します。このようにして、イメージに割り当てられたリソース名を見つけることができます。

于 2009-09-07T08:02:38.323 に答える
-1

Close() メソッドを呼び出す必要はありません。using 句の最後で Dispose() によって自動的に呼び出されます。したがって、コードは次のようになります。

using(BinaryReader reader = new BinaryReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("ResourceBlenderExpress.Resources.images.flags.tr.png")))
using(BinaryWriter writer = new BinaryWriter(File.OpenWrite(imageFile))) 
{
    while((read = reader.Read(buffer, 0, buffer.Length)) > 0) 
    {
        writer.Write(buffer, 0, read);
    }
}
于 2009-09-07T07:49:23.593 に答える