在我的解决方案中,有一个包含几个文件的文件夹。所有这些文件都具有Build Action“Embedded Resource”。
使用此代码我可以获得一个文件:
assembly.GetManifestResourceStream(assembly.GetName().Name + ".Folder.File.txt");
但有没有办法获取此文件夹中的所有*.txt
个文件?一个名称列表或迭代它们的方法?
答案 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());
}
}