2016-05-06 3 views
2

У меня есть простое приложение WinForms, но у него есть некоторые встроенные ресурсы (в подпапке под «Ресурсы»), которые я бы хотел скопировать в папку на компьютере. В настоящее время, у меня последний рабочий (с явным методом присвоения имен в внедренный ресурс и где она должна идти):Петля через встроенные ресурсы и копирование на локальный путь

string path = @"C:\Users\derek.antrican\"; 

using (Stream input = Assembly.GetExecutingAssembly().GetManifestResourceStream("WINFORMSAPP.Resources.SUBFOLDER.FILE.txt")) 
using (Stream output = File.Create(path + "FILE.txt")) 
{ 
    input.CopyTo(output); 
} 

Но я все еще пытаюсь выяснить, как получить прежнюю работу: пробегаем по всем ресурсов в папке «WINFORMSAPP.Resources.SUBFOLDER» и перемещении их. Я сделал довольно много Googling, но я все еще не уверен, как получить список каждого Embedded Resource в этой подпапке.

Любая помощь была бы высоко оценена!

ответ

4

начать получать все ресурсы, внедренные в сборке:

Assembly.GetExecutingAssembly().GetManifestResourceNames() 

Вы можете проверить эти имена по имени нужной вложенной папки, чтобы увидеть, если они находятся внутри или вне ее с помощью простого вызова StartsWith.

Теперь перебрать имена, и получить соответствующий поток ресурсов:

const string subfolder = "WINFORMSAPP.Resources.SUBFOLDER."; 
var assembly = Assembly.GetExecutingAssembly(); 
foreach (var name in assembly.GetManifestResourceNames()) { 
    // Skip names outside of your desired subfolder 
    if (!name.StartsWith(subfolder)) { 
     continue; 
    } 
    using (Stream input = assembly.GetManifestResourceStream(name)) 
    using (Stream output = File.Create(path + name.Substring(subfolder.Length))) { 
     input.CopyTo(output); 
    } 
} 
Смежные вопросы