El CryptoStream no hace terminaciones de línea RFC2045. Por lo tanto, eso no funcionará para mí.
El ToBase64String es inaceptable porque no es un enfoque de transmisión. No quiero mantener todos los datos en la memoria al mismo tiempo.
Por lo tanto, necesitaba alternativas.
Richard Grimes registró una aquí:
http://www.grimes.nildram.co.uk/workshops/encodedStream.htm
En lugar de usar que, debido a las necesidades de licencias y de características, escribí una aplicación independiente, disponible aquí:
http://cheeso.members.winisp.net/srcview.aspx?dir=streams&file=Base64Stream.cs
Está bajo licencia de the MS-PL .
Para utilizar esta base 64 para comprimir entonces a codificar un archivo, haga lo siguiente:
byte[] working= new byte[1024];
int n;
using (Stream input = File.OpenRead(fileToCompress))
{
using (Stream output = new FileStream("file.deflated.b64"))
{
using (var b64 = new Base64Stream(output, Base64Stream.Mode.Encode))
{
b64.Rfc2045Compliant = true; // OutputLineLength = 76;
using (var compressor = new DeflateStream(b64, CompressionMode.Compress, true))
{
while ((n = input.Read(working, 0, working.Length)) != 0)
{
compressor.Write(working, 0, n);
}
}
}
}
}
Parece fácil. ¿Puedes establecer longitudes de línea RFC 2045 en esa secuencia? – Cheeso
Puede llamar a 'Convert.ToBase64String (bytes, Base64FormattingOptions.InsertLineBreaks)' Sin embargo, 'ToBase64Transform' no expone esa opción. – SLaks
ok eso es extraño. Entonces, si quiero crear un documento base64 para fines de vinculación MIME (a la RFC 2045), entonces no puedo usar eso, pero si convierto desde un documento base64, ¿funcionaría? – Cheeso