2013-04-11 7 views
9

Der Titel fasst es ziemlich gut zusammen. Ich weiß, ich kann die eingebettete Ressource Namen erhalten mit:C# Get eingebettete Ressourcen aus bestimmten Ordner oder unterscheiden zwischen eingebetteten Ressourcen in verschiedenen Ordnern

 var assembly = System.Reflection.Assembly.GetExecutingAssembly(); 
     string[] files = assembly.GetManifestResourceNames(); 

Aber ich möchte in der Lage sein, um die eingebetteten Ressourcen erhalten von nur einem bestimmten Ordner. Oder zumindest in der Lage sein, zwischen eingebetteten Ressourcen aus verschiedenen Ordnern zu unterscheiden.

Antwort

10

Die Ressourcen werden im folgenden Format zurückgegeben.

[Namespace].[Folder].[Filename] 

Beachten Sie, dass alle Ordner in dem Pfad durch . ‚s getrennt sind. Also, wenn Sie hatte eine eingebettete Ressource mit der folgenden Konfiguration

 
myproject.csproj (Namespace = com.mycompany.myproject) 
- Resources 
    - Images 
    - Icons 
     - my_icon.ico 

Der Ressourcenname wäre ...

com.mycompany.myproject.Resources.Images.Icons.my_icon.ico 

Wenn Sie alle aus einem bestimmten Ordner auswählen möchten, können Sie den folgenden LINQ Ausdruck oder ändern Sie es nach Ihren Bedürfnissen.

string prefix = "your_namespace.your_folder." 

var resourceNames = Assembly.GetExecutingAssembly() 
    .GetManifestResourceNames() 
    .Where(name => name.StartsWith(prefix)); 
+0

Dieser Code wird einen Fehler werfen, weil es nicht IEnumerable in String umwandeln kann. Außerdem gibt es nicht mehr als eine Datei im selben Ordner. – Flavia

+0

Hoppla, diesen Code aus einem anderen Projekt eingefügt und vergessen, den Typ zu ändern. Ich habe es jetzt korrigiert. –

+0

Jetzt verdient es eine Stimme :) – Flavia

3

Wenn Sie einen Ordner namens Images erstellen, und legen Sie die Datei dort, dann wird der Name der Ressource wird Assembly.Images.fileName.

So können Sie versuchen, so etwas wie:

var assembly = System.Reflection.Assembly.GetExecutingAssembly(); 

var names = assembly.GetManifestResourceNames().Where (n => n.Contains(".Images.")); 
Verwandte Themen