ResourceLoader.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Drawing;
  5. using System.IO;
  6. using System.Reflection;
  7. using System.IO.Compression;
  8. namespace FastReport.Utils
  9. {
  10. /// <summary>
  11. /// Resource loader class.
  12. /// </summary>
  13. public static partial class ResourceLoader
  14. {
  15. /// <summary>
  16. /// Gets a stream from specified assembly resource.
  17. /// </summary>
  18. /// <param name="assembly">Assembly name.</param>
  19. /// <param name="resource">Resource name.</param>
  20. /// <returns>Stream object.</returns>
  21. public static Stream GetStream(string assembly, string resource)
  22. {
  23. string assembly_full_name = assembly;
  24. #if MONO
  25. assembly_full_name += ".Mono";
  26. #endif
  27. foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
  28. {
  29. AssemblyName name = new AssemblyName(a.FullName);
  30. if (name.Name == assembly_full_name)
  31. {
  32. return a.GetManifestResourceStream(assembly + ".Resources." + resource);
  33. }
  34. }
  35. return null;
  36. }
  37. /// <summary>
  38. /// Gets a stream from FastReport assembly resource.
  39. /// </summary>
  40. /// <param name="resource">Resource name.</param>
  41. /// <returns>Stream object.</returns>
  42. public static Stream GetStream(string resource)
  43. {
  44. return GetStream("FastReport", resource);
  45. }
  46. /// <summary>
  47. /// Gets a stream from specified assembly resource and unpacks it.
  48. /// </summary>
  49. /// <param name="assembly">Assembly name.</param>
  50. /// <param name="resource">Resource name.</param>
  51. /// <returns>Stream object.</returns>
  52. public static Stream UnpackStream(string assembly, string resource)
  53. {
  54. using (Stream packedStream = GetStream(assembly, resource))
  55. using (Stream gzipStream = new GZipStream(packedStream, CompressionMode.Decompress, true))
  56. {
  57. MemoryStream result = new MemoryStream();
  58. const int BUFFER_SIZE = 4096;
  59. gzipStream.CopyTo(result, BUFFER_SIZE);
  60. result.Position = 0;
  61. return result;
  62. }
  63. }
  64. /// <summary>
  65. /// Gets a stream from specified FastReport assembly resource and unpacks it.
  66. /// </summary>
  67. /// <param name="resource">Resource name.</param>
  68. /// <returns>Stream object.</returns>
  69. public static Stream UnpackStream(string resource)
  70. {
  71. return UnpackStream("FastReport", resource);
  72. }
  73. }
  74. }