2016-08-01 7 views
4

У меня есть следующий код:Как читать все байты потока, но последние 8

using (var fs = new FileStream(@"C:\dump.bin", FileMode.Create)) 
{ 
    income.CopyTo(fs); 
} 

income является потоком, который мне нужно сохранить на диск, проблема в том, что я хочу, чтобы игнорировать последние 8 байтов и сохранить все до этого. Доходный поток доступен только для чтения, только вперед, поэтому я не могу предсказать его размер, и я не хочу загружать весь поток в память из-за отправки огромных файлов.

Любая помощь будет оценена по достоинству.

+0

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

+0

у вас есть образец кода? – user3900456

ответ

1

Может быть (или, скорее, наверное) есть очиститель способ сделать это, но быть прагматичными в данный момент первая мысль, которая приходит на ум это:

using (var fs = new FileStream(@"C:\dump.bin", FileMode.Create)) 
{ 
    income.CopyTo(fs); 
    fs.SetLength(Math.Max(income.Length - 8, 0)); 
} 

Какой набор это длина файла после это написано.

+0

было бы в порядке с огромными файлами, например 4gb? – user3900456

+0

Ну, изначально писать 8 байтов «слишком много» при разговоре о 4 ГБ не должно быть проблемой, и обрезка файла с конца не требует полной перезаписи файла, поэтому с точки зрения производительности это должно быть хорошо. – DAXaholic

+0

классно, спасибо! – user3900456