Ich habe mit einer Idee gespielt, die ich für eine einfache Idee hielt. Ich möchte in der Lage sein, eine Datei von irgendwo (Website, Dateisystem, ftp) einzulesen, einige Operationen darauf durchzuführen (komprimieren, verschlüsseln, etc.) und dann irgendwo speichern (irgendwo kann ein Dateisystem, ftp oder was auch immer sein) . Es ist ein einfaches Pipeline-Design. Ich würde gerne die Datei einlesen und auf einen MemoryStream schreiben, dann die Operationen für die Daten im MemoryStream ausführen und diese Daten dann irgendwo im MemoryStream speichern. Ich dachte, ich könnte den gleichen Stream dazu verwenden, aber ich habe ein paar Probleme:
Ich hatte gehofft, dass ich jeden der Schritte als separate Threads ausführen kann und den Komprimierungsschritt starten kann, sobald Daten im Stream vorhanden sind, und sobald die Komprimierung einige komprimierte Daten im Stream verfügbar hat Ich könnte damit anfangen, es zu speichern (zum Beispiel). Ist so etwas mit den C # Streams problemlos möglich? Haben Sie Gedanken, wie Sie das am besten erreichen können?
Danke,
Mike
Verwenden einer Hilfsmethode zum Steuern des Streams:
%Vor%Sie können einfach kombinieren, was Sie brauchen:
%Vor%Je nachdem, was Sie eigentlich tun möchten, würden Sie die Streams anders verketten. Dies verwendet auch relativ wenig Speicher, da nur die Daten im Speicher sind.
StreamReader / StreamWriter sollte nicht entworfen worden sein, um den zugrunde liegenden Stream zu schließen - das ist ein schreckliches Fehlverhalten in der BCL. Aber sie tun, sie werden nicht geändert werden (wegen der Abwärtskompatibilität), also sind wir mit dieser Katastrophe einer API fest.
Aber es gibt einige gut etablierte Problemumgehungen, wenn Sie StreamReader / Writer verwenden möchten, aber den Stream danach geöffnet lassen.
Tags und Links c#