Nano Hash - криптовалюты, майнинг, программирование

Ошибка при чтении встроенного ресурса в массив байтов (C#)

У меня есть встроенный ресурс с именем «Test.exe». Я хочу сделать следующее:

  1. Считайте содержимое Test.exe в массив байтов.
  2. Запишите содержимое Test.exe (теперь в массиве байтов) в новое место (C:\Test.exe).

Я использую следующий код (найденный на этом сайте), но проблема в том, что "s" всегда возвращает нулевое значение. Я использую приведенный ниже код следующим образом: byte[] b = ReadResource("Test.exe");

public static byte[] ReadResource(string resourceName)
{
    using (Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
    {
        byte[] buffer = new byte[1024];
        using (MemoryStream ms = new MemoryStream())
        {
            while (true)
            {
                int read = s.Read(buffer, 0, buffer.Length);
                if (read <= 0)
                    return ms.ToArray();
                ms.Write(buffer, 0, read);
            }
        }
    }
}  

Надеюсь, кто-то сможет найти то, что я не вижу.


Ответы:


1

Необходимо указать полное имя ресурса. Так, например, если ваше приложение называется Foo:

byte[] b = ReadResource("Foo.Test.exe");

На самом деле проще всего было бы открыть сборку с помощью Reflector и посмотреть точное название встроенного ресурса. Между именем приложения и именем ресурса может быть пространство имен.

А если у вас нет Reflector (да, он стал платным продуктом), чтобы узнать названия встроенных ресурсов, вы можете использовать следующий код:

foreach (var res in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
    Console.WriteLine(res);
}

Как только вы получите точное имя встроенного ресурса, передайте его методу ReadResource.

В качестве еще одной альтернативы вы можете использовать ildasm.exe и дважды щелкнуть файл MANIFEST, который покажет вам все встроенные ресурсы.

11.06.2011
  • Что такое отражатель? Это стороннее приложение? 11.06.2011
  • Вы можете использовать ILSpy как бесплатную альтернативу рефлектору. 11.06.2011

  • 2

    Вы можете сделать это с помощью одной строки кода, если используете «типизированные» ресурсы.

    File.WriteAllBytes("C:\\test1.exe", Resources.TestFile);
    

    Чтобы добавить типизированный ресурс:

    • перейти к свойствам проекта Resources вкладка
    • выберите File в качестве типа ресурса
    • добавьте свой исполняемый файл в ресурсы

      введите здесь описание изображения

    • теперь вы можете ссылаться на содержимое файла по Resources.TestFile

    11.06.2011
  • Это отличный ответ. Спасибо. Тогда просто из любопытства, зачем кому-то добавлять исполняемый файл в качестве ресурса, используя любой другой метод, если этот так прост? 11.06.2011
  • @ Эван - хммм ... чтобы усложнить жизнь, я думаю :) 11.06.2011
  • @ Эван - так ты решил сделать это трудным путем? :) 11.06.2011
  • Не совсем, но он ответил на мой вопрос, который я задал :) 12.06.2011
  • Извините, что не был полезен :(. 12.06.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..