Auf resourcen zugreifen C#

Neuer Titel neues Glück,

nachdem mein vorheriger Artikel leider ignoriert wurde, frage ich hier nun mal mit einer anderen überschrift und mit einem einzigen Satz:

wie kann ich eine resource in den ordner temp kopieren??

LG
Sebastian

Hallo!

Du kannst über die Klasse ResourceManager auf Ressourcen in einer Assembly zugreifen. Die Klasse hat u.a. die Methoden GetObject() (hilfreich, wenn das eingebettete Objekt selbst Funktionalitäten zum Speichern anbietet, bspw. ein Bitmap) oder GetStream(), worüber Du dann an die Binärdaten des eingebetteten Objekts rankommst, um sie in eine Datei zu schreiben.

Gruß,
Martin

Hallo Martin,

Danke schonmal für die Antwort, ich habe nun mit der von dir geposteten methode den Stream mit einem Streamwriter ins temporäre Verzeichnis kopiert.

Es wird auch eine Datei ins verzeichnis geschrieben, aber leider kommt dann der error:

%1 ist keine zulässige Win32-Anwendung

was mache ich falsch?

LG
Sebastian

Hallo!

Kann ich Dir ohne Code nicht sagen - vergleich halt mal die Datei, die Du eingebettet hast mit der, die Du rausgeschrieben hast (z.B. mit fc).
Falls diese nicht übereinstimmen, hast Du beim Rausschreiben was falsch gemacht.

Gruß,
Martin

Hallo Martin,

hier der code mit dem ich versuche die datei in das temporäre verzeichnis zu kopieren:

private void buttonStart\_Click(object sender, EventArgs e)
 {
 if(combobox1.Text == "Test")
 {

 StreamWriter RC = new StreamWriter(@"C:\temp\Test.exe");

 RC.Write(WindowsFormsApplication1.Properties.Resources.ResourceManager.GetStream("Test.exe"));

 RC.Close();

 System.Diagnostics.Process.Start(@"C:\temp\Test.exe");
 }
 }

die geschriebene datei ist leer, dass heißt, wenn ich die mit notepad++ öffne steht da nichts

LG
Sebastian

Hallo!

Da sind gleich mehrere Fehler drin.

  1. StreamWriter eignet sich nicht zum Schreiben von Binärdaten, sondern von Text - lies’ Dir die Doku dazu mal durch.
  2. Es gibt keine Überladung StreamWriter.Write(Stream), mit der Du offenbar den gesamten Inhalt des RessourceStreams in Datei schreiben willst. Du brauchst einen BinaryWriter und musst die Daten aus dem RessourceStream blockweise auslesen und schreiben.
  3. Beim Namen einer eingebetteten Resource musst Du den Namespace der Anwendung und ggf. Unterverzeichnisse mitgeben, nur mit „test.exe“ kommst Du nicht weit. Momentan müsste das GetResourceStream null zurück liefern, weil es die Resource mit dem angegebenen Namen nicht findet und Du schreibst in die Datei genau dieses null - kein Wunder, dass die Datei leer ist. Lies’ Dir die Dokumentation und die Beispiele zum Thema Resourcen unter .NET mal durch.
  4. Warum versuchst Du, eine Binärdatei mit Notepad+ zu öffnen? Dass die Datei leer ist und die Original test.exe etwas größer, siehst Du doch schon im Explorer. Wenn es tatsächlich um Unterschiede in einzelnen Bytes geht, nimmst Du dafür vielleicht besser den Hexeditor, der in VS mit dabei ist (oder einen anderen Hexeditor Deiner Wahl, aber keinen Texteditor).

Allgemein:
Bitte Dokumentation der verwendeten Klassen durchlesen und erst selbst den eigenen Code zu debuggen versuchen.

Gruß,
Martin