2013-04-11 20 views
9

Başlık oldukça iyi özetliyor.C# Belirli klasördeki gömülü kaynakları alın ya da farklı klasörlerdeki gömülü kaynaklar arasında ayrım yapın

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

Ama sadece belirli bir klasörden gömülü kaynaklar elde edebilmek istiyorum: Ben kullanarak gömülü kaynak adları alabilirsiniz biliyorum. Ya da en azından gömülü kaynakları farklı klasörlerden ayırt edebilmek.

cevap

10

Kaynaklar aşağıdaki biçimde döndürülür. yolundaki tüm dosya klasörü . 's ayrılmış

[Namespace].[Folder].[Filename] 

not edin. Yani kaynak adı olurdu

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

aşağıdaki yapılandırmaya ... Belirli bir klasördeki tüm seçmek istiyorsanız

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

, aşağıdaki LINQ kullanabilirsiniz ile gömülü bir kaynak olsaydı İhtiyaçlarınıza göre ifade edin veya değiştirin. Eğer Görüntüler adında bir klasör oluşturun ve orada dosyasını,

string prefix = "your_namespace.your_folder." 

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

Bu kod:

Böylece gibi bir şey deneyebilirsiniz. Ayrıca, aynı klasörün altında birden fazla dosya bulunmuyor – Flavia

+0

Oops, başka bir projeden bu kodu yapıştırdı ve türü değiştirmeyi unuttu. Şimdi düzeltdim. –

+0

Şimdi bir oylamayı hak ediyor :) – Flavia

3

, kaynağın ardından adı Assembly.Images.fileName olur. o dizeye IEnumerable dönüştürmek olamaz çünkü bir hata atar

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

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