2011-11-21 12 views
30

W moim rozwiązaniu miał folder z kilkoma plikami. Wszystkie te pliki mają Build Action "Embedded Resource".Lista wszystkich zasobów osadzonych w folderze

Z tym kodem mogę pobrać plik:

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

ale czy istnieje jakiś sposób, aby uzyskać wszystkie *.txt pliki w tym folderze? Lista nazw lub metoda iteracji przez nich wszystkich?

Odpowiedz

60

Można sprawdzić

assembly.GetManifestResourceNames() 

która zwraca tablicę ciągów wszystkich zasobów zawartych. Następnie możesz odfiltrować tę listę, aby znaleźć wszystkie pliki przechowywane w postaci osadzonych zasobów.

Aby uzyskać szczegółowe informacje, patrz MSDN docs for GetManifestResourceNames.

1

spróbuj z tym. tu masz wszystkie pliki

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

T jest oczywiście w twoim typie. więc można go używać rodzajowy

-3

tylko pęknięty to zastosowanie:

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 "Właśnie to złamałem". To zajęło 18 miesięcy ?! :) –

+3

first filenames = ToList(), a następnie dla każdej nazwy pliku items = filenames.ToArray() ??? a następnie string.ToString() ??? Czy ty żartujesz? – sasjaq

9

Spróbuj tego, zwraca tablicę ze wszystkimi .txt plików wewnątrz Folder katalogów.

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

UWAGA: Odkomentuj linia w celu uzyskania pliku //.Select(....

Powiązane problemy