Laden...

[gelöst] Kopieren von Ressourcen lokal

Erstellt von schillerdeluxe vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.037 Views
S
schillerdeluxe Themenstarter:in
138 Beiträge seit 2006
vor 15 Jahren
[gelöst] Kopieren von Ressourcen lokal

Hallo, ich habe ein kleines problem, und zwar ich habe ressourcen eingebettet und möchte diese jetzt mittels File.Copy lokal copieren...

ich bekomme immer nur eine file not found exception...

946 Beiträge seit 2008
vor 15 Jahren

Die Fehlermeldung ist eindeutig, du hast den Pfad nicht richtig angegeben. Dieser ist nämlich nicht im Programmordner. Ausserdem hängt das auch noch ab, wie du die Ressourcen speicherst (eingebetteteRessource, nicht eingebettete Ressource, etc).

S
schillerdeluxe Themenstarter:in
138 Beiträge seit 2006
vor 15 Jahren

die resource ist eingebettet:



string[] test = Assembly.GetCallingAssembly().GetManifestResourceNames();
 File.Copy(test[0], @"C:\Users\user\Desktop\blabla.txt");

656 Beiträge seit 2008
vor 15 Jahren

Was dir GetManifestResourceNames() liefert, sind Strings. Keine Dateinamen.

Versuchs mal mit GetManifestResourceStream().

S
schillerdeluxe Themenstarter:in
138 Beiträge seit 2006
vor 15 Jahren

ja, ich brauch ja auch Strings, weil ich über File.Copy die Ressourcen kopierne möchte, und da muss ich den alten pfad angeben (den, den ich jetzt gerne hätte) und den neuen

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo schillerdeluxe,

File.Copy ist einfach der falsche Befehl. Das sollte aber eigentlich schon aus dem Gesagten klar geworden sein. Die Alternative wurde auch schon genannt.

herbivore

S
schillerdeluxe Themenstarter:in
138 Beiträge seit 2006
vor 15 Jahren

Tatsächlich...

Lösung:


Stream inStream = Assembly.GetCallingAssembly().GetManifestResourceStream("SetupDatabase.DatabaseData."+fileName + ".txt");
            string[] bla = Assembly.GetCallingAssembly().GetManifestResourceNames();
            Stream outStream = File.Create(Path.GetTempPath()+fileName+".txt");

            byte[] temp = new byte[100 * 1024];

            for (int i = inStream.Read(temp, 0, temp.Length); i > 0; i = inStream.Read(temp, 0, temp.Length))
            {
                outStream.Write(temp, 0, i);
            }

            outStream.Close();


DANKE!