ResXResourceReader Třída

Definice

Vytvoří výčet souborů a datových proudů prostředků XML (.resx) a čte sekvenční páry názvu a hodnoty prostředku.

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
Dědičnost
ResXResourceReader
Implementuje

Příklady

Následující příklad ukazuje, jak použít k ResXResourceReader iteraci prostřednictvím prostředků v souboru .resx. Nejprve se ResXResourceReaderrsxr vytvoří pro soubor items.resx. Dále se GetEnumerator metoda používá k vytvoření objektu pro IDictionaryEnumerator iteraci prostředky a zobrazení obsahu v konzole.

#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

Poznámky

Důležité

Volání metod z této třídy s nedůvěryhodnými daty představuje bezpečnostní riziko. Metody z této třídy volejte pouze s důvěryhodnými daty. Další informace najdete v tématu Ověření všech vstupů.

Třída ResXResourceReader poskytuje výchozí implementaci IResourceReader rozhraní, které čte informace o prostředcích ve formátu XML. Ke čtení informací o prostředcích z binárního formátu prostředků použijte ResourceReader třídu .

Použijete ResXResourceReader třídu k vytvoření výčtu prostředků v souborech .resx procházením slovníkového enumerátoru (IDictionaryEnumerator), který je vrácen metodou GetEnumerator . Voláním metod poskytovaných nástrojem IDictionaryEnumerator můžete přejít na další prostředek a přečíst název a hodnotu každého prostředku v souboru .resx.

Poznámka

Třída ResXResourceReader poskytuje dva enumerátory. Metoda ResXResourceReader.GetEnumerator vrátí IDictionaryEnumerator objekt. Tuto metodu doporučujeme použít k vytvoření výčtu prostředků. Metoda ResXResourceReader.IEnumerable.GetEnumerator je explicitní implementace rozhraní, která vrací IEnumerator objekt. Nedoporučujeme její použití.

Následující příklad používá metodu GetEnumerator k získání objektu IDictionaryEnumerator , který slouží k výčtu prostředků v souboru .resx. Příklad obsahuje rutinu CreateResourceFile , která vytvoří potřebný soubor prostředků.

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

UseResXDataNodes Pokud je truevlastnost , hodnota IDictionaryEnumerator.Value vlastnosti je objekt, ResXDataNode nikoli hodnota prostředku. Tím se z vlastnosti zpřístupní ResXDataNode.Comment komentář k položce prostředku. Následující příklad nastaví UseResXDataNodes vlastnost na true a vytvoří výčet prostředků v souboru .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

Pokud UseResXDataNodes je true, ResXDataNode položky ve výčtu můžou být:

  • Pojmenované prostředky spolu s jejich daty. V tomto případě ResXDataNode.FileRef je nullvlastnost .

  • Pojmenované prostředky spolu s názvem souboru, který obsahuje data prostředků. V tomto případě vrátí vlastnost ResXFileRef objekt, ResXDataNode.FileRef který poskytuje informace o prostředku, včetně jeho názvu souboru. Pokud se používají relativní názvy souborů, měli byste vždy nastavit BasePath vlastnost tak, aby poskytovala referenční bod pro relativní cestu k souboru.

Pokud chcete načíst pojmenované prostředky ze souboru .resx místo výčet jeho prostředků, můžete vytvořit ResXResourceSet instanci objektu a volat jeho GetString metody a GetObject .

Poznámka

Třída ResXResourceReader obsahuje požadavek na propojení a požadavek dědičnosti na úrovni třídy, který se vztahuje na všechny členy. Výjimka SecurityException je vyvolán, pokud přímý volající nebo odvozená třída nemá oprávnění úplný vztah důvěryhodnosti.

Konstruktory

ResXResourceReader(Stream)

Inicializuje novou instanci ResXResourceReader třídy pro zadaný datový proud.

ResXResourceReader(Stream, AssemblyName[])

Inicializuje novou instanci ResXResourceReader třídy pomocí datového proudu a pole názvů sestavení.

ResXResourceReader(Stream, ITypeResolutionService)

Inicializuje novou instanci ResXResourceReader třídy pomocí vstupního datového proudu a služby překladu typu.

ResXResourceReader(String)

Inicializuje novou instanci ResXResourceReader třídy pro zadaný soubor prostředků.

ResXResourceReader(String, AssemblyName[])

Inicializuje novou instanci ResXResourceReader třídy pomocí názvu souboru prostředků XML a pole názvů sestavení.

ResXResourceReader(String, ITypeResolutionService)

Inicializuje novou instanci ResXResourceReader třídy pomocí názvu souboru a služby překladu typu.

ResXResourceReader(TextReader)

Inicializuje novou instanci ResXResourceReader třídy pro zadaný TextReader.

ResXResourceReader(TextReader, AssemblyName[])

Inicializuje novou instanci ResXResourceReader třídy pomocí objektu TextReader a pole názvů sestavení.

ResXResourceReader(TextReader, ITypeResolutionService)

Inicializuje novou instanci třídy pomocí čtečky textového ResXResourceReader streamu a služby překladu typů.

Vlastnosti

BasePath

Získá nebo nastaví základní cestu pro relativní cestu k souboru zadané v objektu ResXFileRef .

UseResXDataNodes

Získá nebo nastaví hodnotu, která označuje, zda ResXDataNode jsou objekty vráceny při čtení aktuálního souboru prostředků XML nebo datového proudu.

Metody

Close()

Uvolní všechny prostředky používané nástrojem ResXResourceReader.

Dispose(Boolean)

Uvolní nespravované prostředky používané nástrojem ResXResourceReader a volitelně uvolní spravované prostředky.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
Finalize()

Tento člen přepíše metodu Finalize() .

FromFileContents(String)

Vytvoří nový ResXResourceReader objekt a inicializuje jej pro čtení řetězce, jehož obsah je ve formě souboru prostředků XML.

FromFileContents(String, AssemblyName[])

Vytvoří nový ResXResourceReader objekt a inicializuje ho pro čtení řetězce, jehož obsah je ve formě souboru prostředků XML, a k použití pole AssemblyName objektů k překladu názvů typů zadaných v prostředku.

FromFileContents(String, ITypeResolutionService)

Vytvoří nový ResXResourceReader objekt a inicializuje ho pro čtení řetězce, jehož obsah je ve formě souboru prostředků XML, a k použití objektu ITypeResolutionService k překladu názvů typů zadaných v prostředku.

GetEnumerator()

Vrátí enumerátor pro aktuální ResXResourceReader objekt.

GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetMetadataEnumerator()

Poskytuje slovník enumerátor, který může načíst vlastnosti návrhu z aktuálního souboru prostředků XML nebo datového proudu.

GetType()

Type Získá z aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Explicitní implementace rozhraní

IDisposable.Dispose()

Uvolní nespravované prostředky používané nástrojem ResXResourceReader a volitelně uvolní spravované prostředky. Popis tohoto členu najdete v Dispose() metodě .

IEnumerable.GetEnumerator()

Vrátí enumerátor pro aktuální ResXResourceReader objekt. Popis tohoto členu najdete v GetEnumerator() metodě .

Metody rozšíření

Cast<TResult>(IEnumerable)

Přetypuje prvky objektu na IEnumerable zadaný typ.

OfType<TResult>(IEnumerable)

Filtruje prvky objektu IEnumerable na základě zadaného typu.

AsParallel(IEnumerable)

Umožňuje paralelizaci dotazu.

AsQueryable(IEnumerable)

Převede objekt na IEnumerableIQueryable.

Platí pro

Viz také