zvepb
@zvepb

Как извлечь ресурсы добавляемые через EmbeddedResources.Add на другой стороне?

Я добавляю в свой проект mp3 файл через :

System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.EmbeddedResources.Add(@"mainVoice.mp3");


После компиляции через

CompilerResults results = icc.CompileAssemblyFromSource(parameters, codeCompile);


по размеру файла, я вижу что ресурс встроен. Как я могу получить доступ к нему из скомпилированного файла ?

То есть сделать что-то подобное

byte[] mySound = Properties.Resources.mainVoice;
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
@romazhan
Вам нужно использовать класс Assembly и метод GetManifestResourceStream. Например, чтобы получить поток данных для встроенного ресурса с именем mainVoice.mp3, вы можете использовать следующий код:
Assembly assembly = Assembly.LoadFrom(@"путь к скомпилированному файлу");
Stream stream = assembly.GetManifestResourceStream("mainVoice.mp3");

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

Важно указать имя ресурса с учетом того, что он может быть вложен в папку ресурсов. Например: (folder/resource) Resources/mainVoice.mp3 -> Resources.mainVoice.mp3.

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

Чтобы скопировать поток в массив байтов:
using (MemoryStream memoryStream = new MemoryStream())
{
    stream.CopyTo(memoryStream);
    byte[] resourceBytes = memoryStream.ToArray();
}

Кстати нужно будет обработать исключения, так как операция чтения может завершиться с ошибкой.

Также можно использовать класс StreamReader для чтения ресурса из потока данных. Например, чтобы считать ресурс как текстовую строку:
using (StreamReader reader = new StreamReader(stream))
{
    string resourceText = reader.ReadToEnd();
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы