2013-09-22 4 views
3

Я использую компонент .NET, который считывает определенные двоичные файлы, используя метод, который ожидают строку с указанием полного пути, как это:C# Получить полный путь к встроенному ресурсу?

Read("c:\\somefile.ext"); 

Я поставил somefile.ext в качестве встроенного ресурса мой проект. Есть ли способ, по которому я могу подать какой-то путь к встроенному ресурсу в команду чтения команды?

+2

Внедренный ресурс не имеет «полное имя». Вы не можете ссылаться на него с файловым путем, как если бы он существовал в файловой системе. У вашего компонента есть функция 'Read', которая будет принимать параметр« Stream »? –

+0

К сожалению, это не так. Таким образом, самым простым вариантом было бы не встраивать его и «Копировать в выходной каталог»? Спасибо! Alex – Corvinalex

ответ

3

путь к ресурсу имеет вид namespace.projectfolder.filename.ext.

Для того, чтобы прочитать содержимое, вы можете использовать вспомогательный класс как этот

public class ResourceReader 
{ 
    // to read the file as a Stream 
    public static Stream GetResourceStream(string resourceName) 
    { 
     Assembly assembly = Assembly.GetExecutingAssembly(); 
     Stream resourceStream = assembly.GetManifestResourceStream(resourceName); 
     return resourceStream; 
    } 

    // to save the resource to a file 
    public static void CreateFileFromResource(string resourceName, string path) 
    { 
     Stream resourceStream = GetResourceStream(resourceName); 
     if (resourceStream != null) 
     { 
      using (Stream input = resourceStream) 
      { 
       using (Stream output = File.Create(path)) 
       { 
        input.CopyTo(output); 
       } 
      } 
     } 
    } 
} 
+0

Спасибо Shamp. Этот вспомогательный класс прекрасно работает, чтобы извлечь встроенный файл. – Corvinalex

+1

Класс Stream имеет метод CopyTo, который можно использовать вместо ваш CopyStream. http://msdn.microsoft.com/en-us/library/dd782932.aspx – Jimmy

+0

Спасибо @ Jimmy. Обновлен код. – shamp00

0

Вам необходимо использовать пространство имен проекта вместе с именем встроенного ресурса. Например, предположим, что файл somefile.ext находится в папке ресурсов/файлов в вашем проекте с именем ProjectA. Правильная строка, которую вы должны использовать для чтения внедренного ресурса является:

ProjectA.resources.files.somefile.ext

Смежные вопросы