ResourceLoader.cs 2.6 KB

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