Compartir a través de


ResXResourceReader Clase

Definición

Enumera los archivos y secuencias de recursos XML (.resx) y lee los pares de nombre y valor de recursos secuenciales.

public ref class ResXResourceReader : System::Resources::IResourceReader
public ref class ResXResourceReader : IDisposable, System::Collections::IEnumerable, System::Resources::IResourceReader
public class ResXResourceReader : System.Resources.IResourceReader
public class ResXResourceReader : IDisposable, System.Collections.IEnumerable, System.Resources.IResourceReader
type ResXResourceReader = class
    interface IResourceReader
    interface IEnumerable
    interface IDisposable
Public Class ResXResourceReader
Implements IResourceReader
Public Class ResXResourceReader
Implements IDisposable, IEnumerable, IResourceReader
Herencia
ResXResourceReader
Implementaciones

Ejemplos

En el ejemplo siguiente se muestra cómo usar un ResXResourceReader para recorrer en iteración los recursos de un archivo .resx. En primer lugar, se crea el ResXResourceReaderrsxr para el archivo items.resx. A continuación, el método GetEnumerator se usa para crear un IDictionaryEnumerator para recorrer en iteración los recursos y mostrar el contenido en la consola.

#using <system.windows.forms.dll>
#using <System.dll>

using namespace System;
using namespace System::Resources;
using namespace System::Collections;
void main()
{

   // Create a ResXResourceReader for the file items.resx.
   ResXResourceReader^ rsxr = gcnew ResXResourceReader( "items.resx" );


   // Iterate through the resources and display the contents to the console.
   IEnumerator^ myEnum = rsxr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      DictionaryEntry^ d = safe_cast<DictionaryEntry^>(myEnum->Current);
      Console::WriteLine( "{0}:\t {1}", d->Key, d->Value );
   }


   //Close the reader.
   rsxr->Close();
}
using System;
using System.Resources;
using System.Collections;

class ReadResXResources
{
   public static void Main()
   {

      // Create a ResXResourceReader for the file items.resx.
      ResXResourceReader rsxr = new ResXResourceReader("items.resx");

      // Iterate through the resources and display the contents to the console.
      foreach (DictionaryEntry d in rsxr)
      {
    Console.WriteLine(d.Key.ToString() + ":\t" + d.Value.ToString());
      }

     //Close the reader.
     rsxr.Close();
   }
}
Imports System.Resources
Imports System.Collections

Class ReadResXResources
   
   Public Shared Sub Main()
      
      ' Create a ResXResourceReader for the file items.resx.
      Dim rsxr As ResXResourceReader
      rsxr = New ResXResourceReader("items.resx")

      ' Iterate through the resources and display the contents to the console.
      Dim d As DictionaryEntry
      For Each d In  rsxr
         Console.WriteLine(d.Key.ToString() + ":" + ControlChars.Tab + d.Value.ToString())
      Next d
      
      'Close the reader.
      rsxr.Close()

   End Sub

End Class

Comentarios

Importante

Llamar a métodos de esta clase con datos que no son de confianza es un riesgo de seguridad. Llame a los métodos de esta clase solo con datos de confianza. Para obtener más información, vea Validar todas las entradas.

La clase ResXResourceReader proporciona una implementación predeterminada de la interfaz IResourceReader que lee la información de recursos en un formato XML. Para leer información de recursos de un formato de recurso binario, use la clase ResourceReader.

Use la clase ResXResourceReader para enumerar recursos en archivos .resx mediante el recorrido del enumerador de diccionario (IDictionaryEnumerator) devuelto por el método GetEnumerator. Llame a los métodos proporcionados por IDictionaryEnumerator para avanzar al siguiente recurso y para leer el nombre y el valor de cada recurso en el archivo .resx.

Nota

La clase ResXResourceReader proporciona dos enumeradores. El método ResXResourceReader.GetEnumerator devuelve un objeto IDictionaryEnumerator; se recomienda usar este método para enumerar los recursos. El método ResXResourceReader.IEnumerable.GetEnumerator es una implementación de interfaz explícita que devuelve un objeto IEnumerator; no se recomienda su uso.

En el ejemplo siguiente se usa el método GetEnumerator para obtener un objeto IDictionaryEnumerator que se usa para enumerar los recursos de un archivo .resx. En el ejemplo se incluye una rutina CreateResourceFile que crea el archivo de recursos necesario.

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

public class Example
{
   private const string resxFilename = @".\CountryHeaders.resx";
    
   public static void Main()
   {
      // Create a resource file to read.
      CreateResourceFile();
      
      // Enumerate the resources in the file.
      ResXResourceReader rr = new ResXResourceReader(resxFilename);
      IDictionaryEnumerator dict = rr.GetEnumerator();
      while (dict.MoveNext())
         Console.WriteLine("{0}: {1}", dict.Key, dict.Value);   
   }

   private static void CreateResourceFile()
   {
      ResXResourceWriter rw = new ResXResourceWriter(resxFilename);
      string[] resNames = {"Country", "Population", "Area", 
                           "Capital", "LCity" };
      string[] columnHeaders = { "Country Name", "Population (2010}", 
                                 "Area", "Capital", "Largest City" };
      string[] comments = { "The localized country name", "", 
                            "The area in square miles", "", 
                            "The largest city based on 2010 data" };
      rw.AddResource("Title", "Country Information");
      rw.AddResource("nColumns", resNames.Length);
      for (int ctr = 0; ctr < resNames.Length; ctr++) {
         ResXDataNode node = new ResXDataNode(resNames[ctr], columnHeaders[ctr]);
         node.Comment = comments[ctr];
         rw.AddResource(node);
      }
      rw.Generate();
      rw.Close();
   }
}
// The example displays the following output:
//       Title: Country Information
//       nColumns: 5
//       Country: Country Name
//       Population: Population (2010}
//       Area: Area
//       Capital: Capital
//       LCity: Largest City
Imports System.Collections
Imports System.Resources

Module Example
   Private Const resxFilename As String = ".\CountryHeaders.resx"
     
   Public Sub Main()
      ' Create a resource file to read.
      CreateResourceFile()
      
      ' Enumerate the resources in the file.
      Dim rr As New ResXResourceReader(resxFilename)
      Dim dict As IDictionaryEnumerator = rr.GetEnumerator()
      Do While dict.MoveNext()
         Console.WriteLine("{0}: {1}", dict.Key, dict.Value)   
      Loop
   End Sub
   
   Private Sub CreateResourceFile()
      Dim rw As New ResxResourceWriter(resxFilename)
      Dim resNames() As String = {"Country", "Population", "Area", 
                                  "Capital", "LCity" }
      Dim columnHeaders() As String = { "Country Name", "Population (2010}", 
                                        "Area", "Capital", "Largest City" }
      Dim comments() As String = { "The localized country name", "", 
                                   "The area in square miles", "", 
                                   "The largest city based on 2010 data" }
      rw.AddResource("Title", "Country Information")
      rw.AddResource("nColumns", resNames.Length)
      For ctr As Integer = 0 To resNames.Length - 1
         Dim node As New ResXDataNode(resNames(ctr), columnHeaders(ctr))
         node.Comment = comments(ctr)
         rw.AddResource(node)
      Next
      rw.Generate()
      rw.Close()
   End Sub
End Module
' The example displays the following output:
'       Title: Country Information
'       nColumns: 5
'       Country: Country Name
'       Population: Population (2010}
'       Area: Area
'       Capital: Capital
'       LCity: Largest City

Si la propiedad UseResXDataNodes es true, el valor de la propiedad IDictionaryEnumerator.Value es un objeto ResXDataNode en lugar del valor del recurso. Esto hace que el comentario de un elemento de recurso esté disponible en la propiedad ResXDataNode.Comment. En el ejemplo siguiente se establece la propiedad UseResXDataNodes en true y se enumeran los recursos de un archivo .resx,

using System;
using System.Collections;
using System.ComponentModel.Design;
using System.Resources;

public class Example
{
   private const string resxFilename = @".\CountryHeaders.resx";
    
   public static void Main()
   {
      // Create a resource file to read.
      CreateResourceFile();
      
      // Enumerate the resources in the file.
      ResXResourceReader rr = new ResXResourceReader(resxFilename);
      rr.UseResXDataNodes = true;
      IDictionaryEnumerator dict = rr.GetEnumerator();
      while (dict.MoveNext()) {
         ResXDataNode node = (ResXDataNode) dict.Value;
         Console.WriteLine("{0,-20} {1,-20} {2}", 
                           node.Name + ":", 
                           node.GetValue((ITypeResolutionService) null), 
                           ! String.IsNullOrEmpty(node.Comment) ? "// " + node.Comment : "");
      }
   }

   private static void CreateResourceFile()
   {
      ResXResourceWriter rw = new ResXResourceWriter(resxFilename);
      string[] resNames = {"Country", "Population", "Area", 
                           "Capital", "LCity" };
      string[] columnHeaders = { "Country Name", "Population (2010}", 
                                 "Area", "Capital", "Largest City" };
      string[] comments = { "The localized country name", "", 
                            "The area in square miles", "", 
                            "The largest city based on 2010 data" };
      rw.AddResource("Title", "Country Information");
      rw.AddResource("nColumns", resNames.Length);
      for (int ctr = 0; ctr < resNames.Length; ctr++) {
         ResXDataNode node = new ResXDataNode(resNames[ctr], columnHeaders[ctr]);
         node.Comment = comments[ctr];
         rw.AddResource(node);
      }
      rw.Generate();
      rw.Close();
   }
}
// The example displays the following output:
//    Title:               Country Information
//    nColumns:            5
//    Country:             Country Name         // The localized country name
//    Population:          Population (2010}
//    Area:                Area                 // The area in square miles
//    Capital:             Capital
//    LCity:               Largest City         // The largest city based on 2010 data
Imports System.Collections
Imports System.ComponentModel.Design
Imports System.Resources

Module Example
   Private Const resxFilename As String = ".\CountryHeaders.resx"
     
   Public Sub Main()
      ' Create a resource file to read.
      CreateResourceFile()
      
      ' Enumerate the resources in the file.
      Dim rr As New ResXResourceReader(resxFilename)
      rr.UseResXDataNodes = True
      Dim dict As IDictionaryEnumerator = rr.GetEnumerator()
      Do While dict.MoveNext()
         Dim node As ResXDataNode = DirectCast(dict.Value, ResXDataNode)
         Console.WriteLine("{0,-20} {1,-20} {2}", 
                           node.Name + ":", 
                           node.GetValue(CType(Nothing, ITypeResolutionService)), 
                           If(Not String.IsNullOrEmpty(node.Comment), "// " + node.Comment, ""))
      Loop
   End Sub
   
   Private Sub CreateResourceFile()
      Dim rw As New ResxResourceWriter(resxFilename)
      Dim resNames() As String = {"Country", "Population", "Area", 
                                  "Capital", "LCity" }
      Dim columnHeaders() As String = { "Country Name", "Population (2010}", 
                                        "Area", "Capital", "Largest City" }
      Dim comments() As String = { "The localized country name", "", 
                                   "The area in square miles", "", 
                                   "The largest city based on 2010 data" }
      rw.AddResource("Title", "Country Information")
      rw.AddResource("nColumns", resNames.Length)
      For ctr As Integer = 0 To resNames.Length - 1
         Dim node As New ResXDataNode(resNames(ctr), columnHeaders(ctr))
         node.Comment = comments(ctr)
         rw.AddResource(node)
      Next
      rw.Generate()
      rw.Close()
   End Sub
End Module
' The example displays the following output:
'    Title:               Country Information
'    nColumns:            5
'    Country:             Country Name         // The localized country name
'    Population:          Population (2010}
'    Area:                Area                 // The area in square miles
'    Capital:             Capital
'    LCity:               Largest City         // The largest city based on 2010 data

Si UseResXDataNodes es true, los elementos ResXDataNode de la enumeración pueden ser:

  • Recursos con nombre junto con sus datos. En este caso, la propiedad ResXDataNode.FileRef es null.

  • Recursos con nombre junto con el nombre del archivo que contiene los datos de recursos. En este caso, la propiedad ResXDataNode.FileRef devuelve un objeto ResXFileRef que proporciona información sobre el recurso, incluido su nombre de archivo. Si se usan nombres de archivo relativos, siempre debe establecer la propiedad BasePath para proporcionar un punto de referencia para la ruta de acceso de archivo relativa.

Si desea recuperar recursos con nombre de un archivo .resx en lugar de enumerar sus recursos, puede crear instancias de un objeto ResXResourceSet y llamar a sus métodos GetString y GetObject.

Nota

La clase ResXResourceReader contiene una demanda de vínculo y una demanda de herencia en el nivel de clase que se aplica a todos los miembros. Se produce una excepción SecurityException cuando el llamador inmediato o la clase derivada no tiene permiso de plena confianza.

Constructores

ResXResourceReader(Stream)

Inicializa una nueva instancia de la clase ResXResourceReader para la secuencia especificada.

ResXResourceReader(Stream, AssemblyName[])

Inicializa una nueva instancia de la clase ResXResourceReader mediante una secuencia y una matriz de nombres de ensamblado.

ResXResourceReader(Stream, ITypeResolutionService)

Inicializa una nueva instancia de la clase ResXResourceReader mediante un flujo de entrada y un servicio de resolución de tipos.

ResXResourceReader(String)

Inicializa una nueva instancia de la clase ResXResourceReader para el archivo de recursos especificado.

ResXResourceReader(String, AssemblyName[])

Inicializa una nueva instancia de la clase ResXResourceReader mediante un nombre de archivo de recursos XML y una matriz de nombres de ensamblado.

ResXResourceReader(String, ITypeResolutionService)

Inicializa una nueva instancia de la clase ResXResourceReader mediante un nombre de archivo y un servicio de resolución de tipos.

ResXResourceReader(TextReader)

Inicializa una nueva instancia de la clase ResXResourceReader para el TextReaderespecificado.

ResXResourceReader(TextReader, AssemblyName[])

Inicializa una nueva instancia de la clase ResXResourceReader mediante un objeto TextReader y una matriz de nombres de ensamblado.

ResXResourceReader(TextReader, ITypeResolutionService)

Inicializa una nueva instancia de la clase ResXResourceReader mediante un lector de secuencias de texto y un servicio de resolución de tipos.

Propiedades

BasePath

Obtiene o establece la ruta de acceso base de la ruta de acceso del archivo relativa especificada en un objeto ResXFileRef.

UseResXDataNodes

Obtiene o establece un valor que indica si se devuelven ResXDataNode objetos al leer el archivo o secuencia de recursos XML actual.

Métodos

Close()

Libera todos los recursos usados por el ResXResourceReader.

Dispose(Boolean)

Libera los recursos no administrados usados por el ResXResourceReader y, opcionalmente, libera los recursos administrados.

Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
Finalize()

Este miembro invalida el método Finalize().

FromFileContents(String)

Crea un nuevo objeto ResXResourceReader e inicializa para leer una cadena cuyo contenido se encuentra en forma de archivo de recursos XML.

FromFileContents(String, AssemblyName[])

Crea un nuevo objeto ResXResourceReader e inicializa para leer una cadena cuyo contenido está en forma de archivo de recursos XML y para usar una matriz de objetos AssemblyName para resolver nombres de tipo especificados en un recurso.

FromFileContents(String, ITypeResolutionService)

Crea un nuevo objeto ResXResourceReader e inicializa para leer una cadena cuyo contenido está en forma de archivo de recursos XML y para usar un objeto ITypeResolutionService para resolver los nombres de tipo especificados en un recurso.

GetEnumerator()

Devuelve un enumerador para el objeto ResXResourceReader actual.

GetHashCode()

Actúa como función hash predeterminada.

(Heredado de Object)
GetMetadataEnumerator()

Proporciona un enumerador de diccionario que puede recuperar las propiedades en tiempo de diseño del archivo o secuencia de recursos XML actual.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Implementaciones de interfaz explícitas

IDisposable.Dispose()

Libera los recursos no administrados usados por el ResXResourceReader y, opcionalmente, libera los recursos administrados. Para obtener una descripción de este miembro, consulte el método Dispose().

IEnumerable.GetEnumerator()

Devuelve un enumerador para el objeto ResXResourceReader actual. Para obtener una descripción de este miembro, consulte el método GetEnumerator().

Métodos de extensión

Cast<TResult>(IEnumerable)

Convierte los elementos de un IEnumerable al tipo especificado.

OfType<TResult>(IEnumerable)

Filtra los elementos de un IEnumerable en función de un tipo especificado.

AsParallel(IEnumerable)

Habilita la paralelización de una consulta.

AsQueryable(IEnumerable)

Convierte un IEnumerable en un IQueryable.

Se aplica a

Consulte también