Скопировать часть байтов из файла c#

495
07 февраля 2017, 18:31

Есть файл 3.exe, в котором записаны еще 2 файла : 1.ехе и 2.ехе (побайтно в конец дописал), нужно "вытащить" отдельно 1.ехе и 2.ехе, в этом вся сложность. 1.ехе можно получить таким путем : начиная копировать от веса 3.ехе без этих 2 файлов и до начала 2.ехе, копирование 2.ехе аналогично. Но тут вся сложность, как понять, где начинается 2.ехе ? была идея записывать в конец файла размер 3.ехе без этих 2 файлов + размер 1.ехе, тем самым получим начало файла 2.ехе, но максимальное значение 255 и ничего не вышло, записывается 0. Можете подсказать, как лучше реализовать ?

Надеюсь, что я доступно объяснил, если нет, то пишите, попробую по-другому.

Пример кода :

var fil2 = File.ReadAllBytes(@"2.exe");
var fil1 = File.ReadAllBytes(@"1.exe");
using (FileStream fs = new FileStream(@"bin.exe", FileMode.Append, FileAccess.Write))
{
    fs.Write(fil2, 0, fil2.Length);
    fs.Flush();
    fs.Close();
}
var rezd = new byte[4] { 5, 55, 56, (byte)fil2.Length };
using (FileStream fs = new FileStream(@"bin.exe", FileMode.Append, FileAccess.Write))
{
    fs.Write(fil1, 0, fil1.Length);
    fs.Write(rezd, 0, rezd.Length);
    fs.Flush();
    fs.Close();
}        
Answer 1

Вам нужно использовать BinaryWriter поверх файлового потока. Не совсем уверен, что у вас там за байты в rezd, но в целом код будет выглядеть примерно так:

var fil2 = File.ReadAllBytes(@"2.exe");
var fil1 = File.ReadAllBytes(@"1.exe");
using (var fs = new FileStream(@"bin.exe", FileMode.Append, FileAccess.Write))
{
    fs.Write(fil2, 0, fil2.Length);
}
var rezd = new byte[] { 5, 55, 56 };
using (var fs = new FileStream(@"bin.exe", FileMode.Append, FileAccess.Write))
{
    using (var writer = new BinaryWriter(fs))
    {
        writer.Write(fil1);
        writer.Write(rezd);
        writer.Write(fil2.Length);
    }
}

Вы используете using, так что ручные вызовы Flush/Close не нужны.

READ ALSO
Как поместить таблицу в кэш?

Как поместить таблицу в кэш?

Имеются 3 таблицы в MS SQL:

506
побайтно прочитать файл, когда он открыт C#

побайтно прочитать файл, когда он открыт C#

Моя история тянется с прошлой темы:

488
Привязка данных к компонентам winforms

Привязка данных к компонентам winforms

Добрый деньВ первый раз столкнулся с такой проблемой: имеется коллекция ObservableCollection<string>, которая была передана как источник данных для...

374
Конвертация звукового файла с помощью NAudio

Конвертация звукового файла с помощью NAudio

При конвертации wav файла по алгоритму A-Law звук на выходе получаеться плохого качества

466