Я думаю, вам следует рассмотреть возможность встраивания ресурсов в сборку, как предлагает Эрно.
Но если вы действительно хотите упаковать их в один файл, вы можете сделать это, просто записав длину каждого потока перед самим потоком.Затем вы можете прочитать length байт и затем вернуть следующий length байт в виде потока.Чтение / запись уродливыми методами ниже.Целевой поток может быть в конечном итоге разархивирован.Обратите внимание, что приведенные ниже наивные методы считывают и записывают всю строку в один буфер и предполагают, что ни один файл не превышает int.MaxValue.
Но я бы не рекомендовал использовать только стандартные библиотеки.
static void Append(Stream source, Stream target)
{
BinaryWriter writer = new BinaryWriter(target);
BinaryReader reader = new BinaryReader(source);
writer.Write((long)source.Length);
byte[] buffer = new byte[1024];
int read;
do
{
read = reader.Read(buffer, 0, buffer.Length);
writer.Write(buffer, 0, read);
}
while (read > 0);
writer.Flush();
}
static Stream ReadNextStream(Stream packed)
{
BinaryReader reader = new BinaryReader(packed);
int streamLength = (int)reader.ReadInt64();
MemoryStream result = new MemoryStream();
byte[] buffer = new byte[streamLength];
reader.Read(buffer, 0, buffer.Length);
BinaryWriter writer = new BinaryWriter(result);
writer.Write(buffer, 0, buffer.Length);
writer.Flush();
result.Seek(0, SeekOrigin.Begin);
return result;
}