Dateien einbinden?

Kanonenfutter

Mitglied
kann ich irgendwie eine oder mehrere Dateien in mein Programm integrieren, ohne sie extern laden zu müssen? (zb wie bei Bildern mit der ImageList)
 
Zuletzt bearbeitet:
Hallo.

Du kannst beim compilieren Objekte mit ein'compilieren', sodass diese in der Assembly enthalten sind.
Solltest du Visual Studio verwenden, so fügst du einfach die Dateien dem Projekt hinzu, und änderst die BuildAktion auf "Eingebettete Ressource".
Ohne VisualStudio übergibst du in der Shell den Parameter /res:Blubb.blab.

Zugegriffen auf diese Ressourcen wird dann mittels Reflection.

Code:
System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file = 
    thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg");
this.pictureBox1.Image = Image.FromStream(file);

Code: Retrieving an Image that is an Embedded Resource (Visual C#)

Mfg,
Alex
 
Danke, aber ein Problem besteht noch:
ich verwende ein shockwave flash plugin, das den string pfad zur .swf Datei braucht. Aber mit GetManifestResourceNames()[index zur eingebetteten swf]
funktioniert es nicht, bis jetzt hat es nur mit einem Pfad zur Datei geklappt, wie kann ich dem flash plugin sagen, dass die swf als resource vorhanden ist?
 
Zuletzt bearbeitet:
Original geschrieben von Kanonenfutter
Danke, aber ein Problem besteht noch:
ich verwende ein shockwave flash plugin, das den string pfad zur .swf Datei braucht. Aber mit GetManifestResourceNames()[index zur eingebetteten swf]
funktioniert es nicht, bis jetzt hat es nur mit einem Pfad zur Datei geklappt, wie kann ich dem flash plugin sagen, dass die swf als resource vorhanden ist?

Uh, mh.
Evt. beim Starten des Programms das eingebettete Flashmove in einen Temp Ordner schreiben, und dann wieder beim Beenden löschen?
Sonst fällt mir nicht wirklich was ein.
 
Wie bringe ich genau die eingebundene Resource wieder hinaus? Ich habe mich bis jetzt nur mit StreamWritern/Readern in Verbindung mit .txt Dateien beschäftigt :-(
 
Wie genau nutze ich BinaryReader / -Writer?
Wenn ich zb dem BinaryReader den Stream input per GetManifestResourceStream("<name der recource>") angebe, kommt die Fehlermeldung "Wert darf nicht Null sein.", aber an der Dateigröße der .exe ist zu erkennen, dass die Datei vorhanden ist.
 
Hast den "Pfad" auch richtig genommen für die Ressource? Also mit Assemblyname etc.

Wenn du dir nicht sicher bist wie er lautet, bastel dir ne kleine Testmethode, welche du über einen Button aufrufst, die dir alle Ressourcennamen ausgibt.

Code:
MessageBox.Show(String.Join("\r\n",this.GetType().Assembly.GetManifestResourceNames()));
(Damit kannst das machen.. ;) )

Also schau mal ob der Name stimmt.

Mfg,
Alex
 
Der Pfad war der richtige, was ich nur nicht verstehe ist, dass der BinaryReader einen Stream verlangt, und GetManifestResourceStream("<dateiname>") gibt doch einen Stream zu der Datei zurück, die ich in die Parameterliste schreibe, oder sehe ich das falsch?

Code:
System.Reflection.Assembly test = System.Reflection.Assembly.GetExecutingAssembly();

System.IO.BinaryReader reader = new System.IO.BinaryReader(test.GetManifestResourceStream("datei.swf"));
Die datei.swf ist schon als eingebettete Resource hinzugefügt.
In der 2. Zeile kommt die Meldung "Wert darf nicht Null sein."
 
Habs mal ausprobiert, und so funktioniert es bei mir.

Code:
FileStream fs = File.Create("C:\\test.gif");
System.IO.BinaryWriter bw = new BinaryWriter(fs);
Stream strm = this.GetType().Assembly.GetManifestResourceStream("EmbTest.test.gif");

byte[] content = new byte[strm.Length];

strm.Read(content,0,(int)strm.Length);
bw.Write(content);

bw.Close();
strm.Close();
fs.Close();
 

Neue Beiträge

Zurück