ResourceReader ResourceReader ResourceReader ResourceReader Class

Definición

Enumera los recursos en un archivo binario de recursos (.resources) leyendo pares secuenciales de nombre/valor del recurso.Enumerates the resources in a binary resources (.resources) file by reading sequential resource name/value pairs.

public ref class ResourceReader sealed : System::Resources::IResourceReader
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ResourceReader : System.Resources.IResourceReader
type ResourceReader = class
    interface IResourceReader
    interface IEnumerable
    interface IDisposable
Public NotInheritable Class ResourceReader
Implements IResourceReader
Herencia
ResourceReaderResourceReaderResourceReaderResourceReader
Atributos
Implementaciones

Comentarios

Importante

Llamar a métodos de esta clase con datos que no son de confianza supone un riesgo de seguridad.Calling methods from this class with untrusted data is a security risk. Llame a los métodos de esta clase solo con datos de confianza.Call the methods from this class only with trusted data. Para obtener más información, vea Data Validation (Validación de datos).For more information, see Data Validation.

La ResourceReader clase proporciona una implementación estándar de la IResourceReader interfaz.The ResourceReader class provides a standard implementation of the IResourceReader interface. Una ResourceReader instancia de representa un archivo. Resources independiente o un archivo. Resources que está incrustado en un ensamblado.A ResourceReader instance represents either a standalone .resources file or a .resources file that is embedded in an assembly. Se utiliza para enumerar los recursos de un archivo. Resources y recuperar sus pares de nombre/valor.It is used to enumerate the resources in a .resources file and retrieve its name/value pairs. Se diferencia de la ResourceManager clase, que se usa para recuperar los recursos con nombre especificados de un archivo. Resources que está incrustado en un ensamblado.It differs from the ResourceManager class, which is used to retrieve specified named resources from a .resources file that is embedded in an assembly. La ResourceManager clase se usa para recuperar recursos cuyos nombres se conocen de antemano, mientras que ResourceReader la clase es útil para recuperar recursos cuyo número o nombres precisos no se conocen en tiempo de compilación.The ResourceManager class is used to retrieve resources whose names are known in advance, whereas the ResourceReader class is useful for retrieving resources whose number or precise names are not known at compile time. Por ejemplo, una aplicación puede usar un archivo de recursos para almacenar la información de configuración que se organiza en secciones y elementos de una sección, donde el número de secciones o elementos de una sección no se conoce de antemano.For example, an application may use a resources file to store configuration information that is organized into sections and items in a section, where the number of sections or items in a section is not known in advance. A continuación, los recursos se pueden denominar genéricamente Section1Item1( Section1Item2 Section1como,,, etc.) y recuperarse ResourceReader mediante un objeto.Resources can then be named generically (such as Section1, Section1Item1, Section1Item2, and so on) and retrieved by using a ResourceReader object.

Importante

Este tipo implementa la interfaz IDisposable.This type implements the IDisposable interface. Cuando haya terminado de utilizar el tipo, debe desecharlo directa o indirectamente.When you have finished using the type, you should dispose of it either directly or indirectly. Para eliminar el tipo directamente, llame a su método Dispose en un bloque try/catch.To dispose of the type directly, call its Dispose method in a try/catch block. Para deshacerse de él indirectamente, use una construcción de lenguaje como using (en C#) o Using (en Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Para más información, vea la sección "Uso de objetos que implementan IDisposable" en el tema de la interfaz IDisposable.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

Para obtener más información sobre el ResourceReader uso de la clase, vea las siguientes secciones:For more information about using the ResourceReader class, see the following sections:

Crear instancias de un objeto ResourceReaderInstantiating a ResourceReader Object

Un archivo. Resources es un archivo binario que se ha compilado a partir de un archivo de texto o un archivo XML. resx con Resgen. exe (generador de archivos de recursos).A .resources file is a binary file that has been compiled from either a text file or an XML .resx file by Resgen.exe (Resource File Generator). Un ResourceReader objeto puede representar un archivo. Resources independiente o un archivo. Resources que se ha incrustado en un ensamblado.A ResourceReader object can represent either a standalone .resources file or a .resources file that has been embedded in an assembly.

Para crear una instancia ResourceReader de un objeto que lee desde un archivo. Resources ResourceReader independiente, utilice el constructor de clase con un flujo de entrada o una cadena que contenga el nombre de archivo. Resources.To instantiate a ResourceReader object that reads from a standalone .resources file, use the ResourceReader class constructor with either an input stream or a string that contains the .resources file name. En el ejemplo siguiente se muestran ambos enfoques.The following example illustrates both approaches. El primero crea una instancia ResourceReader de un objeto que representa un archivo. Resources1.resources Resources denominado usando su nombre de archivo.The first instantiates a ResourceReader object that represents a .resources file named Resources1.resources by using its file name. La segunda instancia de un ResourceReader objeto que representa un archivo. Resources denominado Resources2.resources mediante una secuencia creada a partir del archivo.The second instantiates a ResourceReader object that represents a .resources file named Resources2.resources by using a stream created from the file.

// Instantiate a standalone .resources file from its filename.
var rr1 = new System.Resources.ResourceReader("Resources1.resources");

// Instantiate a standalone .resources file from a stream.
var fs = new System.IO.FileStream(@".\Resources2.resources",
                                  System.IO.FileMode.Open);
var rr2 = new System.Resources.ResourceReader(fs);      
' Instantiate a standalone .resources file from its filename.
Dim rr1 As New System.Resources.ResourceReader("Resources1.resources")

' Instantiate a standalone .resources file from a stream.
Dim fs As New System.IO.FileStream(".\Resources2.resources",
                                   System.IO.FileMode.Open)
Dim rr2 As New System.Resources.ResourceReader(fs)      

Para crear un ResourceReader objeto que represente un archivo. Resources incrustado Assembly , cree una instancia de un objeto a partir del ensamblado en el que se incrusta el archivo. Resources.To create a ResourceReader object that represents an embedded .resources file, instantiate an Assembly object from the assembly in which the .resources file is embedded. Su Assembly.GetManifestResourceStream método devuelve un Stream objeto que se ResourceReader(Stream) puede pasar al constructor.Its Assembly.GetManifestResourceStream method returns a Stream object that can be passed to the ResourceReader(Stream) constructor. En el ejemplo siguiente se crea ResourceReader una instancia de un objeto que representa un archivo. Resources incrustado.The following example instantiates a ResourceReader object that represents an embedded .resources file.

System.Reflection.Assembly assem = 
             System.Reflection.Assembly.LoadFrom(@".\MyLibrary.dll"); 
System.IO.Stream fs = 
             assem.GetManifestResourceStream("MyCompany.LibraryResources.resources");
var rr = new System.Resources.ResourceReader(fs); 
Dim assem As System.Reflection.Assembly = 
             System.Reflection.Assembly.LoadFrom(".\MyLibrary.dll") 
Dim fs As System.IO.Stream = 
             assem.GetManifestResourceStream("MyCompany.LibraryResources.resources")
Dim rr As New System.Resources.ResourceReader(fs) 

Enumerar los recursos de un objeto ResourceReaderEnumerating a ResourceReader Object's Resources

Para enumerar los recursos de un archivo. Resources, llame GetEnumerator al método, que devuelve System.Collections.IDictionaryEnumerator un objeto.To enumerate the resources in a .resources file, you call the GetEnumerator method, which returns an System.Collections.IDictionaryEnumerator object. Llame IDictionaryEnumerator.MoveNext al método para pasar de un recurso al siguiente.You call the IDictionaryEnumerator.MoveNext method to move from one resource to the next. El método devuelve false cuando se han enumerado todos los recursos del archivo. Resources.The method returns false when all the resources in the .resources file have been enumerated.

Nota

Aunque la ResourceReader clase implementa la IEnumerable interfaz y el IEnumerable.GetEnumerator método, el ResourceReader.GetEnumerator método no proporciona la IEnumerable.GetEnumerator implementación.Although the ResourceReader class implements the IEnumerable interface and the IEnumerable.GetEnumerator method, the ResourceReader.GetEnumerator method does not provide the IEnumerable.GetEnumerator implementation. En su lugar, ResourceReader.GetEnumerator el método devuelve IDictionaryEnumerator un objeto de interfaz que proporciona acceso al par de nombre y valor de cada recurso.Instead, the ResourceReader.GetEnumerator method returns an IDictionaryEnumerator interface object that provides access to each resource's name/value pair.

Puede recuperar los recursos individuales de la colección de dos maneras:You can retrieve the individual resources in the collection in two ways:

Recuperar recursos mediante las propiedades IDictionaryEnumeratorRetrieving Resources by Using IDictionaryEnumerator Properties

El primer método para enumerar los recursos de un archivo. Resources implica la recuperación directa del par de nombre y valor de cada recurso.The first method of enumerating the resources in a .resources file involves directly retrieving each resource's name/value pair. Después de llamar al IDictionaryEnumerator.MoveNext método para moverse a cada recurso de la colección, puede recuperar el nombre del recurso de la IDictionaryEnumerator.Key propiedad y los datos de recursos de IDictionaryEnumerator.Value la propiedad.After you call the IDictionaryEnumerator.MoveNext method to move to each resource in the collection, you can retrieve the resource name from the IDictionaryEnumerator.Key property and the resource data from the IDictionaryEnumerator.Value property.

En el ejemplo siguiente se muestra cómo recuperar el nombre y el valor de cada recurso en un archivo. Resources IDictionaryEnumerator.Value utilizando las IDictionaryEnumerator.Key propiedades y.The following example shows how to retrieve the name and value of each resource in a .resources file by using the IDictionaryEnumerator.Key and IDictionaryEnumerator.Value properties. Para ejecutar el ejemplo, cree el siguiente archivo de texto denominado ApplicationResources. txt para definir los recursos de cadena.To run the example, create the following text file named ApplicationResources.txt to define string resources.

Title="Contact Information"  
Label1="First Name:"  
Label2="Middle Name:"  
Label3="Last Name:"  
Label4="SSN:"  
Label5="Street Address:"  
Label6="City:"  
Label7="State:"  
Label8="Zip Code:"  
Label9="Home Phone:"  
Label10="Business Phone:"  
Label11="Mobile Phone:"  
Label12="Other Phone:"  
Label13="Fax:"  
Label14="Email Address:"  
Label15="Alternate Email Address:"  

Después, puede convertir el archivo de recursos de texto en un archivo binario denominado ApplicationResources. Resources mediante el comando siguiente:You can then convert the text resource file to a binary file named ApplicationResources.resources by using the following command:

Resgen ApplicationResources. txtresgen ApplicationResources.txt

En el ejemplo siguiente se usa ResourceReader la clase para enumerar cada recurso del archivo. Resources binario independiente y para mostrar su nombre de clave y su valor correspondiente.The following example then uses the ResourceReader class to enumerate each resource in the standalone binary .resources file and to display its key name and corresponding value.

using System;
using System.Collections;
using System.Resources;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("Resources in ApplicationResources.resources:");
      ResourceReader res = new ResourceReader(@".\ApplicationResources.resources");
      IDictionaryEnumerator dict = res.GetEnumerator();
      while (dict.MoveNext())
         Console.WriteLine("   {0}: '{1}' (Type {2})", 
                           dict.Key, dict.Value, dict.Value.GetType().Name);
      res.Close();
   }
}
// The example displays the following output:
//       Resources in ApplicationResources.resources:
//          Label3: '"Last Name:"' (Type String)
//          Label2: '"Middle Name:"' (Type String)
//          Label1: '"First Name:"' (Type String)
//          Label7: '"State:"' (Type String)
//          Label6: '"City:"' (Type String)
//          Label5: '"Street Address:"' (Type String)
//          Label4: '"SSN:"' (Type String)
//          Label9: '"Home Phone:"' (Type String)
//          Label8: '"Zip Code:"' (Type String)
//          Title: '"Contact Information"' (Type String)
//          Label12: '"Other Phone:"' (Type String)
//          Label13: '"Fax:"' (Type String)
//          Label10: '"Business Phone:"' (Type String)
//          Label11: '"Mobile Phone:"' (Type String)
//          Label14: '"Email Address:"' (Type String)
//          Label15: '"Alternate Email Address:"' (Type String)
Imports System.Collections
Imports System.Resources

Module Example
   Public Sub Main()
      Console.WriteLine("Resources in ApplicationResources.resources:")
      Dim res As New ResourceReader(".\ApplicationResources.resources")
      Dim dict As IDictionaryEnumerator = res.GetEnumerator()
      Do While dict.MoveNext()
         Console.WriteLine("   {0}: '{1}' (Type {2})", dict.Key, dict.Value, dict.Value.GetType().Name)
      Loop
      res.Close()
   End Sub
End Module
' The example displays output like the following:
'       Resources in ApplicationResources.resources:
'          Label3: '"Last Name:"' (Type String)
'          Label2: '"Middle Name:"' (Type String)
'          Label1: '"First Name:"' (Type String)
'          Label7: '"State:"' (Type String)
'          Label6: '"City:"' (Type String)
'          Label5: '"Street Address:"' (Type String)
'          Label4: '"SSN:"' (Type String)
'          Label9: '"Home Phone:"' (Type String)
'          Label8: '"Zip Code:"' (Type String)
'          Title: '"Contact Information"' (Type String)
'          Label12: '"Other Phone:"' (Type String)
'          Label13: '"Fax:"' (Type String)
'          Label10: '"Business Phone:"' (Type String)
'          Label11: '"Mobile Phone:"' (Type String)
'          Label14: '"Email Address:"' (Type String)
'          Label15: '"Alternate Email Address:"' (Type String)

El intento de recuperar los datos de recursos IDictionaryEnumerator.Value de la propiedad puede producir las siguientes excepciones:The attempt to retrieve resource data from the IDictionaryEnumerator.Value property can throw the following exceptions:

Normalmente, estas excepciones se producen si el archivo. Resources se ha modificado manualmente, si el ensamblado en el que se define un tipo no se ha incluido en una aplicación o si se ha eliminado accidentalmente, o si el ensamblado es una versión anterior a la que se ha actualizado. un tipo.Typically, these exceptions are thrown if the .resources file has been modified manually, if the assembly in which a type is defined has either not been included with an application or has been inadvertently deleted, or if the assembly is an older version that predates a type. Si se produce una de estas excepciones, puede recuperar los recursos enumerando cada recurso y llamando al GetResourceData método, como se muestra en la sección siguiente.If one of these exceptions is thrown, you can retrieve resources by enumerating each resource and calling the GetResourceData method, as the following section shows. Este enfoque le proporciona información sobre el tipo de datos que la IDictionaryEnumerator.Value propiedad intentó devolver.This approach provides you with some information about the data type that the IDictionaryEnumerator.Value property attempted to return.

Recuperar recursos por nombre con GetResourceDataRetrieving Resources by Name with GetResourceData

El segundo enfoque para enumerar los recursos en un archivo. Resources también implica desplazarse por los recursos del archivo IDictionaryEnumerator.MoveNext mediante una llamada al método.The second approach to enumerating resources in a .resources file also involves navigating through the resources in the file by calling the IDictionaryEnumerator.MoveNext method. Para cada recurso, se recupera el nombre del recurso de la IDictionaryEnumerator.Key propiedad, que se pasa GetResourceData(String, String, Byte[]) al método para recuperar los datos del recurso.For each resource, you retrieve the resource's name from the IDictionaryEnumerator.Key property, which is then passed to the GetResourceData(String, String, Byte[]) method to retrieve the resource's data. Se devuelve como una matriz de bytes en resourceData el argumento.This is returned as a byte array in the resourceData argument.

Este enfoque es más complicado que recuperar el nombre y el valor del recurso de IDictionaryEnumerator.Key las IDictionaryEnumerator.Value propiedades y, porque devuelve los bytes reales que forman el valor del recurso.This approach is more awkward than retrieving the resource name and value from the IDictionaryEnumerator.Key and IDictionaryEnumerator.Value properties, because it returns the actual bytes that form the resource value. Sin embargo, si se produce una excepción al intentar recuperar el recurso, el GetResourceData método puede ayudar a identificar el origen de la excepción proporcionando información sobre el tipo de datos del recurso.However, if the attempt to retrieve the resource throws an exception, the GetResourceData method can help identify the source of the exception by supplying information about the resource's data type. Para obtener más información acerca de la cadena que indica el tipo de datos del GetResourceDatarecurso, vea.For more information about the string that indicates the resource's data type, see GetResourceData.

En el ejemplo siguiente se muestra cómo utilizar este enfoque para recuperar recursos y controlar las excepciones que se producen.The following example illustrates how to use this approach to retrieve resources and to handle any exceptions that are thrown. Crea mediante programación un archivo. Resources binario que contiene cuatro cadenas, un valor booleano, un entero, un mapa de bits DateTimeTZI y un objeto personalizado.It programmatically creates a binary .resources file that contains four strings, one Boolean, one integer, one bitmap, and one custom DateTimeTZI object. Para ejecutar el ejemplo, haga lo siguiente:To run the example, do the following:

  1. Cree un ensamblado denominado Library. dll que contenga la DateTimeTZI estructura.Create an assembly named Library.dll that contains the DateTimeTZI structure. A continuación se encuentra el código fuente del ensamblado.The following is the source code for the assembly.

    using System;
    
    [Serializable] public struct DateTimeTZI
    {
      DateTime Date;
      TimeZoneInfo TimeZone;
       
      public DateTimeTZI(DateTime date, TimeZoneInfo tz)
      {
         this.Date = date;
         this.TimeZone = tz;
      }
    
       public override string ToString()
       {
         return String.Format("{0:dd/MM/yyyy hh:mm:ss tt} {1}", 
                              Date, TimeZone.StandardName);
       }
    }
    
    <Serializable> Public Structure DateTimeTZI
      Dim [Date] As DateTime
      Dim TimeZone As TimeZoneInfo
       
      Public Sub New([date] As DateTime, tz As TimeZoneInfo)
         Me.[Date] = [date]
         Me.TimeZone = tz
      End Sub
      
      Public Overrides Function ToString() As String
         Return String.Format("{0:dd/MM/yyyy hh:mm:ss tt} {1}", 
                              [Date], TimeZone.StandardName)
      End Function
    End Structure
    

    Compile el código fuente en C# mediante el comando siguiente:Compile the source code in C# by using the following command:

    csc /t:library library.cs  
    

    O bien, puede compilarlo en Visual Basic mediante el comando siguiente:Or, you can compile it in Visual Basic by using the following command:

    vbc library.vb /t:library  
    
  2. Compile y ejecute el siguiente código fuente, que crea un archivo. Resources denominado ContactResources. Resources.Compile and execute the following source code, which creates a .resources file named ContactResources.resources.

    using System;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Resources;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Text;
    
    
    public class Example
    {
       public static void Main()
       {
          // Bitmap as stream.
          MemoryStream bitmapStream = new MemoryStream();
          Bitmap bmp = new Bitmap(@".\ContactsIcon.jpg");
          bmp.Save(bitmapStream, ImageFormat.Jpeg);
              
          // Define resources to be written.
          using (ResourceWriter rw = new ResourceWriter(@".\ContactResources.resources"))
          {
             rw.AddResource("Title", "Contact List");
             rw.AddResource("NColumns", 5);         
             rw.AddResource("Icon", bitmapStream);         
             rw.AddResource("Header1", "Name");
             rw.AddResource("Header2", "City");
             rw.AddResource("Header3", "State");  
             rw.AddResource("VersionDate", new DateTimeTZI(
                            new DateTime(2012, 5, 18),  
                            TimeZoneInfo.Local));
             rw.AddResource("ClientVersion", true);
             rw.Generate();
          }
       }
    }
    
    Imports System.Drawing
    Imports System.IO
    Imports System.Resources
    Imports System.Runtime.Serialization.Formatters.Binary
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          ' Bitmap as stream.
          Dim bitmapStream As New MemoryStream()
          Dim bmp As New Bitmap(".\ContactsIcon.jpg")
          bmp.Save(bitmapStream, Imaging.ImageFormat.jpeg)
              
          ' Define resources to be written.
          Using rw As New ResourceWriter(".\ContactResources.resources")
             rw.AddResource("Title", "Contact List")
             rw.AddResource("NColumns", 5)         
             rw.AddResource("Icon", bitmapStream)         
             rw.AddResource("Header1", "Name")
             rw.AddResource("Header2", "City")
             rw.AddResource("Header3", "State")  
             rw.AddResource("VersionDate", New DateTimeTZI(#05/18/2012#, 
                                                           TimeZoneInfo.Local))
             rw.AddResource("ClientVersion", True)
             rw.Generate()
          End Using
       End Sub
    End Module
    

    El archivo de código fuente se denomina CreateResources.cs.The source code file is named CreateResources.cs. Puede compilarlo en C# mediante el comando siguiente:You can compile it in C# by using the following command:

    csc CreateResources.cs /r:library.dll  
    

    O bien, puede compilarlo en Visual Basic mediante el comando siguiente:Or, you can compile it in Visual Basic by using the following command:

    vbc CreateResources.vb /r:library.dll  
    
  3. Compile y ejecute el siguiente código para enumerar los recursos en el archivo ContactResources. Resources.Compile and run the following code to enumerate the resources in the ContactResources.resources file.

    using System;
    using System.Collections;
    using System.Drawing;
    using System.IO;
    using System.Resources;
    using System.Runtime.Serialization.Formatters.Binary;
    
    public class Example
    {
       public static void Main()
       {
          ResourceReader rdr = new ResourceReader(@".\ContactResources.resources");  
          IDictionaryEnumerator dict = rdr.GetEnumerator();
          while (dict.MoveNext()) {
             Console.WriteLine("Resource Name: {0}", dict.Key);
             try {
                Console.WriteLine("   Value: {0}", dict.Value);
             }
             catch (FileNotFoundException) {
                Console.WriteLine("   Exception: A file cannot be found.");
                DisplayResourceInfo(rdr, (string) dict.Key, false);
             }
             catch (FormatException) {
                Console.WriteLine("   Exception: Corrupted data.");
                DisplayResourceInfo(rdr, (string) dict.Key, true);
             }
             catch (TypeLoadException) {
                Console.WriteLine("   Exception: Cannot load the data type.");
                DisplayResourceInfo(rdr, (string) dict.Key, false);   
             }
          } 
       }
    
       private static void DisplayResourceInfo(ResourceReader rr, 
                                       string key, bool loaded)
       {                                
          string dataType = null;
          byte[] data = null;
          rr.GetResourceData(key, out dataType, out data);
                
          // Display the data type.
          Console.WriteLine("   Data Type: {0}", dataType);
          // Display the bytes that form the available data.      
          Console.Write("   Data: ");
          int lines = 0;
          foreach (var dataItem in data) {
             lines++;
             Console.Write("{0:X2} ", dataItem);
             if (lines % 25 == 0)
                Console.Write("\n         ");
          }
          Console.WriteLine();
          // Try to recreate current state of  data.
          // Do: Bitmap, DateTimeTZI
          switch (dataType) 
          {  
             // Handle internally serialized string data (ResourceTypeCode members).
             case "ResourceTypeCode.String":
                BinaryReader reader = new BinaryReader(new MemoryStream(data));
                string binData = reader.ReadString();
                Console.WriteLine("   Recreated Value: {0}", binData);
                break;
             case "ResourceTypeCode.Int32":
                Console.WriteLine("   Recreated Value: {0}", 
                                  BitConverter.ToInt32(data, 0));
                break;
             case "ResourceTypeCode.Boolean":
                Console.WriteLine("   Recreated Value: {0}", 
                                  BitConverter.ToBoolean(data, 0));
                break;
             // .jpeg image stored as a stream.
             case "ResourceTypeCode.Stream":  
                const int OFFSET = 4;
                int size = BitConverter.ToInt32(data, 0);
                Bitmap value1 = new Bitmap(new MemoryStream(data, OFFSET, size));
                Console.WriteLine("   Recreated Value: {0}", value1); 
                break;
             // Our only other type is DateTimeTZI.
             default:
                // No point in deserializing data if the type is unavailable.
                if (dataType.Contains("DateTimeTZI") && loaded) { 
                   BinaryFormatter binFmt = new BinaryFormatter();
                   object value2 = binFmt.Deserialize(new MemoryStream(data));
                   Console.WriteLine("   Recreated Value: {0}", value2);
                }    
                break;
          }
          Console.WriteLine();
       }
    }
    
    Imports System.Collections
    Imports System.Drawing
    Imports System.IO
    Imports System.Resources
    Imports System.Runtime.Serialization.Formatters.Binary
    
    Module Example
       Public Sub Main()
          Dim rdr As New ResourceReader(".\ContactResources.resources")  
          Dim dict As IDictionaryEnumerator = rdr.GetEnumerator()
          Do While dict.MoveNext()
             Console.WriteLine("Resource Name: {0}", dict.Key)
             Try
                Console.WriteLine("   Value: {0}", dict.Value)
             Catch e As FileNotFoundException
                Console.WriteLine("   Exception: A file cannot be found.")
                DisplayResourceInfo(rdr, CStr(dict.Key), False)
             Catch e As FormatException
                Console.WriteLine("   Exception: Corrupted data.")
                DisplayResourceInfo(rdr, CStr(dict.Key), True)
             Catch e As TypeLoadException
                Console.WriteLine("   Exception: Cannot load the data type.")
                DisplayResourceInfo(rdr, CStr(dict.Key), False)   
             End Try
          Loop 
       End Sub
    
       Private Sub DisplayResourceInfo(rr As ResourceReader, 
                                       key As String, loaded As Boolean)
          Dim dataType As String = Nothing
          Dim data() As Byte = Nothing
          rr.GetResourceData(key, dataType, data)
                
          ' Display the data type.
          Console.WriteLine("   Data Type: {0}", dataType)
          ' Display the bytes that form the available data.      
          Console.Write("   Data: ")
          Dim lines As Integer = 0
          For Each dataItem In data
             lines += 1
             Console.Write("{0:X2} ", dataItem)
             If lines Mod 25 = 0 Then Console.Write("{0}         ", vbCrLf)
          Next
          Console.WriteLine()
          ' Try to recreate current state of  data.
          ' Do: Bitmap, DateTimeTZI
          Select Case dataType   
             ' Handle internally serialized string data (ResourceTypeCode members).
             Case "ResourceTypeCode.String"
                Dim reader As New BinaryReader(New MemoryStream(data))
                Dim binData As String = reader.ReadString()
                Console.WriteLine("   Recreated Value: {0}", binData)
             Case "ResourceTypeCode.Int32"
                Console.WriteLine("   Recreated Value: {0}", 
                                  BitConverter.ToInt32(data, 0))
             Case "ResourceTypeCode.Boolean"
                Console.WriteLine("   Recreated Value: {0}", 
                                  BitConverter.ToBoolean(data, 0))
             ' .jpeg image stored as a stream.
             Case "ResourceTypeCode.Stream"  
                Const OFFSET As Integer = 4
                Dim size As Integer = BitConverter.ToInt32(data, 0)
                Dim value As New Bitmap(New MemoryStream(data, OFFSET, size))
                Console.WriteLine("   Recreated Value: {0}", value) 
             ' Our only other type is DateTimeTZI.
             Case Else
                ' No point in deserializing data if the type is unavailable.
                If dataType.Contains("DateTimeTZI") And loaded Then 
                   Dim binFmt As New BinaryFormatter()
                   Dim value As Object = binFmt.Deserialize(New MemoryStream(data))
                   Console.WriteLine("   Recreated Value: {0}", value)
                End If    
          End Select
          Console.WriteLine()
       End Sub
    End Module
    

    Después de modificar el código fuente (por ejemplo, mediante la generación deliberada de un FormatException al final try del bloque) o el cambio de nombre del ensamblado Library. dll para que no esté disponible en tiempo de ejecución, puede ejecutar el ejemplo para ver cómo se llama a. GetResourceData permite recuperar o volver a crear información de recursos.After modifying the source code (for example, by deliberately throwing a FormatException at the end of the try block) or renaming the Library.dll assembly so that it is unavailable at runtime, you can run the example to see how calls to GetResourceData enable you to retrieve or recreate some resource information.

Constructores

ResourceReader(Stream) ResourceReader(Stream) ResourceReader(Stream) ResourceReader(Stream)

Inicializa una nueva instancia de la clase ResourceReader para la secuencia especificada.Initializes a new instance of the ResourceReader class for the specified stream.

ResourceReader(String) ResourceReader(String) ResourceReader(String) ResourceReader(String)

Inicializa una nueva instancia de la clase ResourceReader para el archivo de recursos denominado especificado.Initializes a new instance of the ResourceReader class for the specified named resource file.

Métodos

Close() Close() Close() Close()

Libera todos los recursos del sistema operativo asociados a este objeto ResourceReader.Releases all operating system resources associated with this ResourceReader object.

Dispose() Dispose() Dispose() Dispose()

Libera todos los recursos usados por la instancia actual de la clase ResourceReader.Releases all resources used by the current instance of the ResourceReader class.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetEnumerator() GetEnumerator() GetEnumerator() GetEnumerator()

Devuelve un enumerador para este objeto ResourceReader.Returns an enumerator for this ResourceReader object.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Sirve como la función hash predeterminada.Serves as the default hash function.

(Inherited from Object)
GetResourceData(String, String, Byte[]) GetResourceData(String, String, Byte[]) GetResourceData(String, String, Byte[]) GetResourceData(String, String, Byte[])

Recupera el nombre de tipo y datos de un recurso con nombre a partir de un archivo de recursos o secuencia abierto.Retrieves the type name and data of a named resource from an open resource file or stream.

GetType() GetType() GetType() GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Inherited from Object)

Implementaciones de interfaz explícitas

IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose()

Libera los recursos que usa ResourceReader.Releases the resources used by the ResourceReader.

IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator()

Devuelve un enumerador para este objeto ResourceReader.Returns an enumerator for this ResourceReader object.

Métodos de extensión

Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable)

Convierte los elementos de IEnumerable en el tipo especificado.Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable)

Filtra los elementos de IEnumerable en función de un tipo especificado.Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable)

Habilita la paralelización de una consulta.Enables parallelization of a query.

AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable)

Convierte una interfaz IEnumerable en IQueryable.Converts an IEnumerable to an IQueryable.

Se aplica a