application/vnd.xfdl;content-encoding="base64-gzip" H4sIAAAAAAAAC+y9aZOiyrYw/N1fwdMn4vbeYXfJqLBP776BgooDoOL4xhMdCKgoAjI4xfPj3wS0 RkWtkqoePHHv7hKSHFauOVeu9e1/13MDWmqOq1vmv5+QO/gTpJmKperm+N9PXEv4SpIE9RX59L/f ...
using System; using System.IO; using System.IO.Compression; . . . public class XfdlFile { public static void DecodeFile(string xfdlFile) { var xfdlContent = File.ReadAllText(xfdlFile); string xmlFile = Path.ChangeExtension(xfdlFile, ".xml"); DecodeContent(xfdlContent, xmlFile); } public static void DecodeContent(string xfdlContent, string xmlFile) { /*--- Strip out first line ---*/ var pos = xfdlContent.IndexOf('\n') + 1; var base64String = xfdlContent.Substring(pos); /*--- Decode Base64 to Binary ---*/ var binaryBytes = Convert.FromBase64String(base64String); var binaryStream = new MemoryStream(binaryBytes); /*--- Ungzip ---*/ using (FileStream xmlStream = File.Create(xmlFile)) { using (GZipStream gZip = new GZipStream(binaryStream, CompressionMode.Decompress)) { CopyStreamTo(gZip, xmlStream); } } } private static long CopyStreamTo(Stream source, Stream destination) { byte[] buffer = new byte[2048]; int bytesRead; long totalBytes = 0; while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0) { destination.Write(buffer, 0, bytesRead); totalBytes += bytesRead; } return totalBytes; } /// <summary> /// Encodes the specified XML file as an XFDL file /// </summary> public static void EncodeFile(string xmlFile) { var xmlContent = File.ReadAllBytes(xmlFile); string xfdlFile = Path.ChangeExtension(xmlFile, ".xfdl"); EncodeContent(xmlContent, xfdlFile); } /// <summary> /// Encodes the specified XML into the specified XFDL file /// </summary> public static void EncodeContent(string xml, string xfdlFile) { var xfdlContent = EncodeContent(xml); File.WriteAllText(xfdlFile, xfdlContent); } /// <summary> /// Encodes the specified XML as XDFL content /// </summary> public static string EncodeContent(string xml) { byte[] xmlContent = new byte[xml.Length]; for (var i = 0; i <= xmlContent.GetUpperBound(0); i++) xmlContent[i] = (byte)(xml[i]); return EncodeContent(xmlContent); } /// <summary> /// Encodes the specified XML content into the specified XFDL file /// </summary> public static void EncodeContent(byte[] xmlContent, string xfdlFile) { var xfdlContent = EncodeContent(xmlContent); File.WriteAllText(xfdlFile, xfdlContent); } /// <summary> /// Encodes the specified XML Content as XFDL content /// </summary> /// <param name="xmlContent"></param> /// <returns></returns> public static string EncodeContent(byte[] xmlContent) { /*--- Inits ---*/ var binaryBytes = new byte[xmlContent.Length]; /*--- Gzip ---*/ using (var xmlStream = new MemoryStream(xmlContent)) { using (var binaryStream = new MemoryStream(binaryBytes)) { using (GZipStream gZip = new GZipStream(binaryStream, CompressionMode.Compress)) { CopyStreamTo(xmlStream, gZip); } } } /*--- Encode Binary to Base64 ---*/ var base64String = Convert.ToBase64String(binaryBytes); /*--- Add Header Line ---*/ var xfdlContent = "application/vnd.xfdl;content-encoding=\"base64-gzip\"\n" + base64String; /*--- Return Result ---*/ return xfdlContent; } }