2013-04-11 12 views
9

タイトルはそれをかなりうまくまとめています。C#特定のフォルダから埋め込みリソースを取得するか、別のフォルダに埋め込まれたリソースを区別する

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

しかし、埋め込みリソースを特定のフォルダから取得できるようにしたいと考えています。または、少なくとも異なるフォルダの組み込みリソースを区別することができます。

答えて

10

リソースは次の形式で戻されます。

[Namespace].[Folder].[Filename] 

パス内のすべてのフォルダは、.で区切られています。ですから、リソース名は次のようになり、次のような構成

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

と埋め込みリソースを持っていた場合...

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

あなたが特定のフォルダからすべてを選択したい場合は、次のLINQを使用することができますがあなたの必要に応じてそれを変更することができます。

string prefix = "your_namespace.your_folder." 

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

このコード:

だからあなたのような何かを試すことができます。それは同じフォルダの下の複数のファイルを考慮していません。 – Flavia

+0

他のプロジェクトのそのコードを貼り付けて、タイプを変更するのを忘れました。私は今それを修正しました。 –

+0

投票に値する: – Flavia

3

あなたがイメージというフォルダを作成し、そこにファイルを置く場合は、リソースの名前がAssembly.Images.fileNameになります。それは文字列にIEnumerableを変換できないため、エラーがスローされます

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

var names = assembly.GetManifestResourceNames().Where (n => n.Contains(".Images.")); 
関連する問題