2016-05-06 20 views
2

Ich habe eine einfache WinForms-Anwendung, aber es hat einige eingebettete Ressourcen (in einem Unterordner unter "Ressourcen"), die ich in einen Ordner auf dem Computer kopieren möchte. Derzeit habe ich die letztere Arbeits (mit einer expliziten Methode, um die Eingebettete Ressource zu benennen und wo sollte es gehen):Schleife durch die eingebetteten Ressourcen und kopiere auf den lokalen Pfad

string path = @"C:\Users\derek.antrican\"; 

using (Stream input = Assembly.GetExecutingAssembly().GetManifestResourceStream("WINFORMSAPP.Resources.SUBFOLDER.FILE.txt")) 
using (Stream output = File.Create(path + "FILE.txt")) 
{ 
    input.CopyTo(output); 
} 

Aber ich bin immer noch versuchen, herauszufinden, wie die ehemalige Funktion zu erhalten: Schleife durch alle Ressourcen im Ordner "WINFORMSAPP.Resources.SUBFOLDER" und verschieben sie. Ich habe ziemlich viel gegoogelt, aber ich weiß immer noch nicht, wie ich eine Liste der einzelnen eingebetteten Ressourcen in diesem Unterordner bekommen soll.

Jede Hilfe wäre sehr geschätzt!

Antwort

4

starten, indem alle Ressourcen immer in Ihrer Assembly eingebettet:

Assembly.GetExecutingAssembly().GetManifestResourceNames() 

Sie können diese Namen gegen den Namen Ihres gewünschten Unterordner überprüfen, um zu sehen, ob sie innerhalb oder außerhalb es mit einem einfachen Anruf StartsWith sind.

Jetzt Schleife durch die Namen und die entsprechende Ressource Strom erhalten:

const string subfolder = "WINFORMSAPP.Resources.SUBFOLDER."; 
var assembly = Assembly.GetExecutingAssembly(); 
foreach (var name in assembly.GetManifestResourceNames()) { 
    // Skip names outside of your desired subfolder 
    if (!name.StartsWith(subfolder)) { 
     continue; 
    } 
    using (Stream input = assembly.GetManifestResourceStream(name)) 
    using (Stream output = File.Create(path + name.Substring(subfolder.Length))) { 
     input.CopyTo(output); 
    } 
}