Compartilhar via


ResXResourceReader Classe

Definição

Enumera arquivos e fluxos de recurso XML (.resx) e lê o nome do recurso sequencial e os pares de valor.

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
Herança
ResXResourceReader
Implementações

Exemplos

O exemplo a seguir demonstra como usar um ResXResourceReader para iterar por meio dos recursos em um arquivo .resx. Primeiro, o ResXResourceReaderrsxr é criado para o arquivo items.resx. Em seguida, o método GetEnumerator é usado para criar uma IDictionaryEnumerator para iterar por meio dos recursos e exibir o conteúdo no console.

#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

Comentários

Importante

Chamar métodos dessa classe com dados não confiáveis é um risco à segurança. Chame os métodos dessa classe apenas com dados confiáveis. Para obter mais informações, consulte Validar todas as entradas.

A classe ResXResourceReader fornece uma implementação padrão da interface IResourceReader que lê as informações do recurso em um formato XML. Para ler informações de recursos de um formato de recurso binário, use a classe ResourceReader.

Use a classe ResXResourceReader para enumerar recursos em arquivos .resx atravessando o enumerador de dicionário (IDictionaryEnumerator) retornado pelo método GetEnumerator. Você chama os métodos fornecidos por IDictionaryEnumerator para avançar para o próximo recurso e ler o nome e o valor de cada recurso no arquivo .resx.

Nota

A classe ResXResourceReader fornece dois enumeradores. O método ResXResourceReader.GetEnumerator retorna um objeto IDictionaryEnumerator; recomendamos que você use esse método para enumerar recursos. O método ResXResourceReader.IEnumerable.GetEnumerator é uma implementação de interface explícita que retorna um objeto IEnumerator; não recomendamos seu uso.

O exemplo a seguir usa o método GetEnumerator para obter um objeto IDictionaryEnumerator usado para enumerar os recursos em um arquivo .resx. O exemplo inclui uma rotina de CreateResourceFile que cria o arquivo de recurso necessário.

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

Se a propriedade UseResXDataNodes for true, o valor da propriedade IDictionaryEnumerator.Value será um objeto ResXDataNode em vez do valor do recurso. Isso disponibiliza o comentário de um item de recurso na propriedade ResXDataNode.Comment. O exemplo a seguir define a propriedade UseResXDataNodes para true e enumera os recursos em um arquivo .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

Se UseResXDataNodes for true, os itens de ResXDataNode na enumeração poderão ser:

  • Recursos nomeados junto com seus dados. Nesse caso, a propriedade ResXDataNode.FileRef é null.

  • Recursos nomeados juntamente com o nome do arquivo que contém os dados do recurso. Nesse caso, a propriedade ResXDataNode.FileRef retorna um objeto ResXFileRef que fornece informações sobre o recurso, incluindo seu nome de arquivo. Se nomes de arquivo relativos forem usados, você sempre deverá definir a propriedade BasePath para fornecer um ponto de referência para o caminho de arquivo relativo.

Se você quiser recuperar recursos nomeados de um arquivo .resx em vez de enumerar seus recursos, poderá criar uma instância de um objeto ResXResourceSet e chamar seus métodos GetString e GetObject.

Nota

A classe ResXResourceReader contém uma demanda de vínculo e uma demanda de herança no nível de classe que se aplica a todos os membros. Uma exceção SecurityException é gerada quando o chamador imediato ou a classe derivada não tem permissão de confiança total.

Construtores

ResXResourceReader(Stream)

Inicializa uma nova instância da classe ResXResourceReader para o fluxo especificado.

ResXResourceReader(Stream, AssemblyName[])

Inicializa uma nova instância da classe ResXResourceReader usando um fluxo e uma matriz de nomes de assembly.

ResXResourceReader(Stream, ITypeResolutionService)

Inicializa uma nova instância da classe ResXResourceReader usando um fluxo de entrada e um serviço de resolução de tipos.

ResXResourceReader(String)

Inicializa uma nova instância da classe ResXResourceReader para o arquivo de recurso especificado.

ResXResourceReader(String, AssemblyName[])

Inicializa uma nova instância da classe ResXResourceReader usando um nome de arquivo de recurso XML e uma matriz de nomes de assembly.

ResXResourceReader(String, ITypeResolutionService)

Inicializa uma nova instância da classe ResXResourceReader usando um nome de arquivo e um serviço de resolução de tipos.

ResXResourceReader(TextReader)

Inicializa uma nova instância da classe ResXResourceReader para o TextReaderespecificado.

ResXResourceReader(TextReader, AssemblyName[])

Inicializa uma nova instância da classe ResXResourceReader usando um objeto TextReader e uma matriz de nomes de assembly.

ResXResourceReader(TextReader, ITypeResolutionService)

Inicializa uma nova instância da classe ResXResourceReader usando um leitor de fluxo de texto e um serviço de resolução de tipos.

Propriedades

BasePath

Obtém ou define o caminho base para o caminho de arquivo relativo especificado em um objeto ResXFileRef.

UseResXDataNodes

Obtém ou define um valor que indica se ResXDataNode objetos são retornados ao ler o arquivo ou fluxo de recurso XML atual.

Métodos

Close()

Libera todos os recursos usados pelo ResXResourceReader.

Dispose(Boolean)

Libera os recursos não gerenciados usados pelo ResXResourceReader e, opcionalmente, libera os recursos gerenciados.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Finalize()

Esse membro substitui o método Finalize().

FromFileContents(String)

Cria um novo objeto ResXResourceReader e inicializa-o para ler uma cadeia de caracteres cujo conteúdo está na forma de um arquivo de recurso XML.

FromFileContents(String, AssemblyName[])

Cria um novo objeto ResXResourceReader e inicializa-o para ler uma cadeia de caracteres cujo conteúdo está na forma de um arquivo de recurso XML e usar uma matriz de objetos AssemblyName para resolver nomes de tipo especificados em um recurso.

FromFileContents(String, ITypeResolutionService)

Cria um novo objeto ResXResourceReader e inicializa-o para ler uma cadeia de caracteres cujo conteúdo está na forma de um arquivo de recurso XML e usar um objeto ITypeResolutionService para resolver nomes de tipo especificados em um recurso.

GetEnumerator()

Retorna um enumerador para o objeto ResXResourceReader atual.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetMetadataEnumerator()

Fornece um enumerador de dicionário que pode recuperar as propriedades de tempo de design do fluxo ou arquivo de recurso XML atual.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

IDisposable.Dispose()

Libera os recursos não gerenciados usados pelo ResXResourceReader e, opcionalmente, libera os recursos gerenciados. Para obter uma descrição desse membro, consulte o método Dispose().

IEnumerable.GetEnumerator()

Retorna um enumerador para o objeto ResXResourceReader atual. Para obter uma descrição desse membro, consulte o método GetEnumerator().

Métodos de Extensão

Cast<TResult>(IEnumerable)

Converte os elementos de um IEnumerable para o tipo especificado.

OfType<TResult>(IEnumerable)

Filtra os elementos de um IEnumerable com base em um tipo especificado.

AsParallel(IEnumerable)

Habilita a paralelização de uma consulta.

AsQueryable(IEnumerable)

Converte um IEnumerable em um IQueryable.

Aplica-se a

Confira também