2011-11-21 33 views
30

En mi solución a tenía una carpeta con algunos archivos. Todos estos archivos tienen la Acción de compilación "Recurso incrustado".Lista de todos los recursos incrustados en una carpeta

Con este código que puede obtener un archivo:

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

pero ¿hay alguna manera de conseguir todos los *.txt archivos de esta carpeta? ¿Una lista de nombres o un método para iterar a través de todos?

Respuesta

60

se puede consultar

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.

Ver MSDN docs for GetManifestResourceNames para más detalles.

1

intente 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érica

-3

Sólo agrietado esto, su uso:

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()); 
    } 
} 
+3

Re "Just cracked this". Eso tomó 18 meses ?! :) –

+3

primeros nombres de archivo = ToList() y luego para cada nombre de archivo items = filenames.ToArray() ??? y luego string.ToString() ??? ¿Me estás tomando el pelo? – sasjaq

9

probar esto, devuelve un array con todos los .txt archivos dentro de la carpeta directorio.

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: Elimine la línea //.Select(... con el fin de obtener el nombre de archivo.

Cuestiones relacionadas