PageRenderTime 26ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/WorldView/Utilities/CompressedXml.cs

#
C# | 90 lines | 68 code | 21 blank | 1 comment | 9 complexity | 78494f4630a6d6cafdc05c781276db85 MD5 | raw file
  1. using System;
  2. using System.IO;
  3. using System.IO.Compression;
  4. using System.Xml;
  5. namespace MoreTerra.Utilities
  6. {
  7. class CompressedXml
  8. {
  9. // This is only for static functions.
  10. private CompressedXml()
  11. {
  12. }
  13. public static void LoadXml(Stream inStream, out XmlDocument xmlDoc, Boolean keepOpen = false)
  14. {
  15. Int32 compressedSize, uncompressedSize;
  16. xmlDoc = null;
  17. if (inStream == null)
  18. return;
  19. if ((inStream.ReadByte() != (Int32)'M') || (inStream.ReadByte() != (Int32)'T') ||
  20. (inStream.ReadByte() != (Int32)'Z'))
  21. return;
  22. uncompressedSize = inStream.ReadByte();
  23. uncompressedSize += (inStream.ReadByte() * 0x100);
  24. uncompressedSize += (inStream.ReadByte() * 0x10000);
  25. uncompressedSize += (inStream.ReadByte() * 0x1000000);
  26. compressedSize = inStream.ReadByte();
  27. compressedSize += (inStream.ReadByte() * 0x100);
  28. compressedSize += (inStream.ReadByte() * 0x10000);
  29. compressedSize += (inStream.ReadByte() * 0x1000000);
  30. if (inStream.Length != (compressedSize + 11))
  31. return;
  32. DeflateStream ds = new DeflateStream(inStream, CompressionMode.Decompress, keepOpen);
  33. xmlDoc = new XmlDocument();
  34. xmlDoc.Load(ds);
  35. }
  36. public static void SaveToMTZ(String inFile, String outFile)
  37. {
  38. FileStream ifs = new FileStream(inFile, FileMode.Open, FileAccess.Read);
  39. FileStream ofs = new FileStream(outFile, FileMode.Create, FileAccess.Write);
  40. Byte[] buffer = new Byte[11];
  41. Int64 uncompressedSize = ifs.Length;
  42. buffer[0] = (Byte)'M';
  43. buffer[1] = (Byte)'T';
  44. buffer[2] = (Byte)'Z';
  45. buffer[3] = (Byte)(uncompressedSize & 0xFF);
  46. buffer[4] = (Byte)((uncompressedSize & 0xFF00) >> 8);
  47. buffer[5] = (Byte)((uncompressedSize & 0xFF0000) >> 16);
  48. buffer[6] = (Byte)((uncompressedSize & 0xFF000000) >> 24);
  49. buffer[7] = 0;
  50. buffer[8] = 0;
  51. buffer[9] = 0;
  52. buffer[10] = 0;
  53. ofs.Write(buffer, 0, 11);
  54. DeflateStream ds = new DeflateStream(ofs, CompressionMode.Compress, true);
  55. ifs.CopyTo(ds);
  56. ds.Flush();
  57. ds.Close();
  58. ifs.Close();
  59. ofs.Seek(7, SeekOrigin.Begin);
  60. Int64 compressedSize = (ofs.Length - 11);
  61. buffer[3] = (Byte)(compressedSize & 0xFF);
  62. buffer[4] = (Byte)((compressedSize & 0xFF00) >> 8);
  63. buffer[5] = (Byte)((compressedSize & 0xFF0000) >> 16);
  64. buffer[6] = (Byte)((compressedSize & 0xFF000000) >> 24);
  65. ofs.Write(buffer, 3, 4);
  66. ofs.Close();
  67. }
  68. }
  69. }