2013-04-11 2 views
9

Il titolo riassume molto bene. So che posso ottenere i nomi risorsa incorporata utilizzando:C# Ottieni risorse incorporate da una cartella specifica o distinguere tra risorse incorporate in diverse cartelle

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

Ma mi piacerebbe essere in grado di ottenere le risorse incorporate solo da una cartella specifica. O almeno in grado di distinguere tra risorse incorporate da diverse cartelle.

risposta

10

Le risorse vengono restituite nel seguente formato.

[Namespace].[Folder].[Filename] 

Si noti che tutte le cartelle nel percorso sono separati da . 's. Quindi, se si ha una risorsa incorporata con la seguente configurazione

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

Il nome della risorsa sarebbe ...

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

Se si desidera selezionare il tutto da una cartella specifica, è possibile utilizzare il seguente LINQ espressione o modificarlo in base alle proprie esigenze.

string prefix = "your_namespace.your_folder." 

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

Questo codice genera un errore perché non in grado di convertire IEnumerable a stringa. Inoltre, non conta più di un file nella stessa cartella – Flavia

+0

Oops, ha incollato quel codice da un altro progetto e si è dimenticato di modificare il tipo. L'ho corretto ora. –

+0

Ora merita un voto :) – Flavia

3

Se si crea una cartella denominata immagini e posizionare il file lì, quindi il nome della risorsa diventa Assembly.Images.fileName.

Così si può provare qualcosa di simile:

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

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