c# - Enumerar todos los recursos incrustados en una carpeta
resourcedictionary c# (4)
Podrías echarle un vistazo
assembly.GetManifestResourceNames()
que devuelve una matriz de cadenas de todos los recursos contenidos. A continuación, puede filtrar esa lista para encontrar todos sus archivos *.txt
almacenados como recursos incrustados.
Consulte los documentos de MSDN para GetManifestResourceNames para obtener más información.
En mi solución a tenía una carpeta con algunos archivos. Todos estos archivos tienen la Acción de compilación "Recurso incrustado".
Con este código puedo obtener un archivo:
assembly.GetManifestResourceStream(assembly.GetName().Name + ".Folder.File.txt");
¿Pero hay alguna forma de obtener todos los archivos *.txt
en esta carpeta? ¿Una lista de nombres o un método para iterar a través de todos?
Pruébalo con esto. aquí obtienes todos los archivos
string[] embeddedResources = Assembly.GetAssembly(typeof(T)).GetManifestResourceNames();
T es por supuesto tu tipo. para que pueda usarlo genérico
Simplemente descifrado esto, use:
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());
}
}
Pruebe esto, devuelve una matriz con todos los archivos .txt dentro del directorio de la carpeta .
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(constantResName.Length + 1))
.ToArray();
}
NOTA: Descomente el //.Select(...
línea para obtener el nombre del archivo.