2016-08-01 15 views
4

ich den folgenden Code haben:Wie alle Bytes eines Streams zu lesen, aber die letzten 8

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

income ist ein Strom, den ich auf der Festplatte speichern müssen, ist das Problem, dass ich das letzte ignorieren wollen 8 Bytes und speichern Sie alles vorher. Der Einkommensstrom ist nur lesbar, nur vorwärts, so dass ich seine Größe nicht voraussagen kann und ich möchte nicht den gesamten Datenstrom in den Speicher laden, weil große Dateien gesendet werden.

Jede Hilfe wird geschätzt.

+0

Sie könnten versuchen, es durch eine Warteschlange zu schieben: Lesen Sie einen Teil der verwaltbaren Größe, schieben Sie es in die Warteschlange, lesen Sie alle bis auf 8 Bytes aus der Warteschlange, schreiben Sie in Ausgabestrom, wiederholen. – n0rd

+0

Haben Sie einen Beispielcode? – user3900456

Antwort

1

Vielleicht (oder eher wahrscheinlich) gibt es ein sauberer Weg, es zu tun, aber im Moment, pragmatisch zu sein der erste Gedanke, der mir in den Sinn kommt, ist dies:

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

Welche ist die Dateilänge einstellen, nach es steht geschrieben.

+0

wäre das ok mit riesigen Dateien, wie 4 GB? – user3900456

+0

Naja, anfänglich 8 Bytes 'zu viel' zu schreiben, wenn man über 4 GB spricht, sollte kein Problem sein, und das Beschneiden einer Datei vom Ende beinhaltet kein vollständiges Neuschreiben der Datei, aus der Sicht der Leistung sollte es in Ordnung sein. – DAXaholic

+0

cool ok, danke! – user3900456