ResourceTool.cs
上传用户:husern
上传日期:2022-03-24
资源大小:534k
文件大小:4k
源码类别:

编辑器/阅读器

开发平台:

C#

  1. // -- FILE ------------------------------------------------------------------
  2. // name       : ResourceTool.cs
  3. // project    : Itenso Web User Forms
  4. // created    : Jani Giannoudis - 2008.10.30
  5. // language   : c#
  6. // environment: .NET 2.0
  7. // copyright  : (c) 2008 by Itenso GmbH, Switzerland
  8. // --------------------------------------------------------------------------
  9. using System;
  10. using System.IO;
  11. using System.Reflection;
  12. namespace Itenso.WebUserForms.Data
  13. {
  14. // ------------------------------------------------------------------------
  15. internal sealed class ResourceTool
  16. {
  17. // ----------------------------------------------------------------------
  18. /// <summary>
  19. /// Opens a stream to the given embedded resource in the test assembly. Fails if the
  20. /// given test resource cannot be located in the assembly.
  21. /// </summary>
  22. /// <param name="name">the name of the embedded resource without assembly prefix</param>
  23. /// <returns>an open stream to the desired embedded resource</returns>
  24. /// <exception cref="EmbeddedResourceNotFoundException">if the resource could not be found</exception>
  25. public static Stream GetResourceAsStream( Type type, string name )
  26. {
  27. Stream stream = null;
  28. Assembly assembly = type.Assembly;
  29. string namespaceName = type.Namespace;
  30. string fullName = namespaceName + "." + name.Replace( '\', '.' ).Replace( '/', '.' );
  31. stream = assembly.GetManifestResourceStream( fullName );
  32. if ( stream == null )
  33. {
  34. throw new EmbeddedResourceNotFoundException( fullName );
  35. }
  36. return stream;
  37. } // GetResourceAsStream
  38. // ----------------------------------------------------------------------
  39. /// <summary>
  40. /// Searches for all embedded resources which are located in a 'directory' with
  41. /// the current class' name in the executing assembly. Like that every test
  42. /// class can have its own test data resources in a directory corresponding to
  43. /// its name. The returned names in the array can be used as an argument to the
  44. /// <see cref="OpenTestResourceStream"/> method.
  45. /// </summary>
  46. public static string[] GetTestResourceNames( Type type )
  47. {
  48. Assembly assembly = type.Assembly;
  49. string namespaceName = type.Namespace;
  50. string assemblyPrefix = namespaceName + "." + type.Name + ".";
  51. string[] resources = assembly.GetManifestResourceNames();
  52. int valid = 0;
  53. for ( int i = 0; i < resources.Length; i++ )
  54. {
  55. string resource = resources[ i ];
  56. if ( resource.StartsWith( assemblyPrefix ) )
  57. {
  58. valid++;
  59. }
  60. else
  61. {
  62. resources[ i ] = null;
  63. }
  64. }
  65. string[] testResources = new string[ valid ];
  66. valid = 0;
  67. for ( int i = 0; i < resources.Length; i++ )
  68. {
  69. string resource = resources[ i ];
  70. if ( resource != null )
  71. {
  72. testResources[ valid ] = resource.Substring( assemblyPrefix.Length );
  73. valid++;
  74. }
  75. }
  76. return testResources;
  77. } // GetTestResourceNames
  78. // ----------------------------------------------------------------------
  79. /// <summary>
  80. /// Opens a stream to the given embedded resource in the test assembly. Fails if the
  81. /// given test resource cannot be located in the assembly.
  82. /// </summary>
  83. /// <param name="name">the name of the embedded resource without assembly prefix</param>
  84. /// <returns>an open stream to the desired embedded resource</returns>
  85. /// <seealso cref="GetTestResourceNames"/>
  86. public static Stream OpenTestResourceStream( Type type, string name )
  87. {
  88. Stream stream = null;
  89. Assembly assembly = type.Assembly;
  90. string namespaceName = type.Namespace;
  91. string fullName = namespaceName + "." + type.Name + "." +
  92. name.Replace( '\', '.' ).Replace( '/', '.' );
  93. stream = assembly.GetManifestResourceStream( fullName );
  94. return stream;
  95. } // OpenTestResourceStream
  96. // ----------------------------------------------------------------------
  97. private ResourceTool()
  98. {
  99. } // ResourceTool
  100. } // class ResourceTool
  101. } // namespace Itenso.WebUserForms.Data
  102. // -- EOF -------------------------------------------------------------------