列出文件夹中的所有嵌入资源

时间:2011-11-21 06:58:50

标签: c# wpf resources

在我的解决方案中,有一个包含几个文件的文件夹。所有这些文件都具有Build Action“Embedded Resource”。

使用此代码我可以获得一个文件:

assembly.GetManifestResourceStream(assembly.GetName().Name + ".Folder.File.txt");

但有没有办法获取此文件夹中的所有*.txt个文件?一个名称列表或迭代它们的方法?

4 个答案:

答案 0 :(得分:80)

你可以看看

assembly.GetManifestResourceNames()

返回包含的所有资源的字符串数组。然后,您可以过滤该列表,以查找存储为嵌入资源的所有*.txt文件。

有关详细信息,请参阅MSDN docs for GetManifestResourceNames

答案 1 :(得分:17)

试试这个,在文件夹目录中返回一个包含所有 .txt 文件的数组。

private string[] GetAllTxt()
{
    var executingAssembly = Assembly.GetExecutingAssembly();
    string folderName = string.Format("{0}.Resources.Folder", executingAssembly.GetName().Name);
    return executingAssembly
        .GetManifestResourceNames()
        .Where(r => r.StartsWith(folderName) && r.EndsWith(".txt"))
        //.Select(r => r.Substring(folderName.Length + 1))
        .ToArray();
}

注意:取消注释//.Select(...行以获取文件名。

答案 2 :(得分:5)

试试这个。在这里你得到所有文件

string[] embeddedResources = Assembly.GetAssembly(typeof(T)).GetManifestResourceNames();

T当然是你的类型。所以你可以使用它通用

答案 3 :(得分:-3)

刚刚解决了这个问题,请使用:

Assembly _assembly;
_assembly = Assembly.GetExecutingAssembly();
List<string> filenames = new List<string>();
filenames = _assembly.GetManifestResourceNames().ToList<string>();
List<string> txtFiles = new List<string>();
for (int i = 0; i < filenames.Count(); i++)
{
    string[] items = filenames.ToArray();
    if (items[i].ToString().EndsWith(".txt"))
    {
        txtFiles.Add(items[i].ToString());
    }
}