Прямо в точку,
Я пытаюсь написать программу, которая инкапсулирует байты из некоторых больших файлов в исполняемый файл (.exe).
Затем эти файлы можно установить обратно, выполнив этот исполняемый файл.
Я начал с самого глупого метода ( Динамическое создание кодов для компиляции )
- Считать байтовые массивы из целевых файлов в программу.
- Динамически генерировать коды, которые могут быть скомпилированы позже, и коды о
инициализировать и записать эти байтовые массивы на диск. (Так что это очень сложный код инициализации массива байтов, такой как: byte [] file = new byte [25, 122, 16, 38, 54, .....] , сгенерированный в соответствии с файлом.)
- Программно использовать компилятор C # для компиляции этих кодов.
- Получить выходной исполняемый файл.
Вот мой сгенерированный код, например:
byte[] Fningjpg = new byte[]{ 255,216,255,224,54,26,199,224,135,253,22,79,135,2........very very long]
File.WriteAllBytes(@"ning.jpg",Fningjpg);
Console.WriteLine("Fningjpg bytes length: "+Fningjpg.Length);
Fningjpg= null;
System.GC.Collect();
Несмотря на плохую эффективность, он очень хорошо работает в файлах среднего размера.
OutOfMemory Ошибка возникает, когда я собираю кодов, которые пытаются инкапсулировать большой файл (30 МБ), который имеет очень очень длинный код объявления байтового массива.
Есть ли лучший способ удовлетворить это требование? Спасибо! (Мои файлы будут иметь максимум
до 100 мб! Решение для этого размера достаточно!)