Freigeben über


ResXResourceReader Klasse

Definition

Listet XML-Ressourcendateien und -streams auf und liest die sequenzielle Ressourcennamen- und Wertpaare.

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
Vererbung
ResXResourceReader
Implementiert

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie Sie mithilfe einer ResXResourceReader die Ressourcen in einer RESX-Datei durchlaufen. Zuerst wird der ResXResourceReaderrsxr für die Datei items.resxerstellt. Als Nächstes wird die GetEnumerator-Methode verwendet, um eine IDictionaryEnumerator zu erstellen, um die Ressourcen zu durchlaufen und den Inhalt in der Konsole anzuzeigen.

#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

Hinweise

Wichtig

Das Aufrufen von Methoden aus dieser Klasse mit nicht vertrauenswürdigen Daten ist ein Sicherheitsrisiko. Rufen Sie die Methoden aus dieser Klasse nur mit vertrauenswürdigen Daten auf. Weitere Informationen finden Sie unter Überprüfen aller Eingaben.

Die ResXResourceReader-Klasse stellt eine Standardimplementierung der IResourceReader Schnittstelle bereit, die Ressourceninformationen in einem XML-Format liest. Um Ressourceninformationen aus einem binären Ressourcenformat zu lesen, verwenden Sie die ResourceReader Klasse.

Sie verwenden die ResXResourceReader Klasse zum Aufzählen von Ressourcen in RESX-Dateien, indem Sie den Wörterbuch-Enumerationsator (IDictionaryEnumerator) durchlaufen, der von der GetEnumerator-Methode zurückgegeben wird. Sie rufen die von IDictionaryEnumerator bereitgestellten Methoden auf, um zur nächsten Ressource zu wechseln und den Namen und Wert jeder Ressource in der RESX-Datei zu lesen.

Anmerkung

Die ResXResourceReader Klasse stellt zwei Enumerationen bereit. Die ResXResourceReader.GetEnumerator-Methode gibt ein IDictionaryEnumerator-Objekt zurück; es wird empfohlen, diese Methode zum Aufzählen von Ressourcen zu verwenden. Die ResXResourceReader.IEnumerable.GetEnumerator-Methode ist eine explizite Schnittstellenimplementierung, die ein IEnumerator-Objekt zurückgibt; wir empfehlen die Verwendung nicht.

Im folgenden Beispiel wird die GetEnumerator-Methode verwendet, um ein IDictionaryEnumerator Objekt abzurufen, das zum Aufzählen der Ressourcen in einer RESX-Datei verwendet wird. Das Beispiel enthält eine CreateResourceFile Routine, die die erforderliche Ressourcendatei erstellt.

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

Wenn die UseResXDataNodes Eigenschaft trueist, ist der Wert der IDictionaryEnumerator.Value-Eigenschaft ein ResXDataNode-Objekt und nicht der Ressourcenwert. Dadurch wird der Kommentar eines Ressourcenelements aus der eigenschaft ResXDataNode.Comment verfügbar. Im folgenden Beispiel wird die eigenschaft UseResXDataNodes auf true festgelegt und die Ressourcen in einer RESX-Datei aufgezählt.

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

Wenn UseResXDataNodestrueist, können die ResXDataNode Elemente in der Enumeration eine der folgenden sein:

  • Benannte Ressourcen zusammen mit ihren Daten. In diesem Fall ist die eigenschaft ResXDataNode.FileRefnull.

  • Benannte Ressourcen zusammen mit dem Namen der Datei, die die Ressourcendaten enthält. In diesem Fall gibt die ResXDataNode.FileRef-Eigenschaft ein ResXFileRef-Objekt zurück, das Informationen zur Ressource bereitstellt, einschließlich des Dateinamens. Wenn relative Dateinamen verwendet werden, sollten Sie immer die eigenschaft BasePath festlegen, um einen Referenzpunkt für den relativen Dateipfad bereitzustellen.

Wenn Sie benannte Ressourcen aus einer RESX-Datei abrufen möchten, anstatt die zugehörigen Ressourcen aufzulisten, können Sie ein ResXResourceSet-Objekt instanziieren und dessen GetString- und GetObject-Methoden aufrufen.

Anmerkung

Die ResXResourceReader Klasse enthält eine Linknachfrage und eine Vererbungsnachfrage auf Klassenebene, die für alle Member gilt. Eine SecurityException Ausnahme wird ausgelöst, wenn der direkte Aufrufer oder die abgeleitete Klasse nicht über voll vertrauenswürdige Berechtigungen verfügt.

Konstruktoren

ResXResourceReader(Stream)

Initialisiert eine neue Instanz der ResXResourceReader Klasse für den angegebenen Datenstrom.

ResXResourceReader(Stream, AssemblyName[])

Initialisiert eine neue Instanz der ResXResourceReader Klasse mithilfe eines Datenstroms und eines Arrays von Assemblynamen.

ResXResourceReader(Stream, ITypeResolutionService)

Initialisiert eine neue Instanz der ResXResourceReader-Klasse mithilfe eines Eingabedatenstroms und eines Typauflösungsdiensts.

ResXResourceReader(String)

Initialisiert eine neue Instanz der ResXResourceReader Klasse für die angegebene Ressourcendatei.

ResXResourceReader(String, AssemblyName[])

Initialisiert eine neue Instanz der ResXResourceReader Klasse mithilfe eines XML-Ressourcendateinamens und eines Arrays von Assemblynamen.

ResXResourceReader(String, ITypeResolutionService)

Initialisiert eine neue Instanz der ResXResourceReader Klasse mithilfe eines Dateinamens und eines Typauflösungsdiensts.

ResXResourceReader(TextReader)

Initialisiert eine neue Instanz der ResXResourceReader Klasse für die angegebene TextReader.

ResXResourceReader(TextReader, AssemblyName[])

Initialisiert eine neue Instanz der ResXResourceReader Klasse mithilfe eines TextReader-Objekts und eines Arrays von Assemblynamen.

ResXResourceReader(TextReader, ITypeResolutionService)

Initialisiert eine neue Instanz der ResXResourceReader Klasse mithilfe eines Textstreamlesers und eines Typauflösungsdiensts.

Eigenschaften

BasePath

Dient zum Abrufen oder Festlegen des Basispfads für den relativen Dateipfad, der in einem ResXFileRef -Objekt angegeben ist.

UseResXDataNodes

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob ResXDataNode Objekte beim Lesen der aktuellen XML-Ressourcendatei oder des aktuellen Datenstroms zurückgegeben werden.

Methoden

Close()

Gibt alle vom ResXResourceReaderverwendeten Ressourcen frei.

Dispose(Boolean)

Gibt die nicht verwalteten Ressourcen frei, die vom ResXResourceReader verwendet werden, und gibt optional die verwalteten Ressourcen frei.

Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
Finalize()

Dieses Element setzt die Finalize()-Methode außer Kraft.

FromFileContents(String)

Erstellt ein neues ResXResourceReader-Objekt und initialisiert es, um eine Zeichenfolge zu lesen, deren Inhalt sich in Form einer XML-Ressourcendatei befindet.

FromFileContents(String, AssemblyName[])

Erstellt ein neues ResXResourceReader-Objekt und initialisiert es, um eine Zeichenfolge zu lesen, deren Inhalt sich in Form einer XML-Ressourcendatei befindet, und um ein Array von AssemblyName Objekten zum Auflösen von Typnamen zu verwenden, die in einer Ressource angegeben sind.

FromFileContents(String, ITypeResolutionService)

Erstellt ein neues ResXResourceReader-Objekt und initialisiert es, um eine Zeichenfolge zu lesen, deren Inhalt sich in Form einer XML-Ressourcendatei befindet, und um ein ITypeResolutionService -Objekt zum Auflösen von Typnamen zu verwenden, die in einer Ressource angegeben sind.

GetEnumerator()

Gibt einen Enumerator für das aktuelle ResXResourceReader -Objekt zurück.

GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetMetadataEnumerator()

Stellt einen Wörterbuch-Enumerator bereit, der die Entwurfszeiteigenschaften aus der aktuellen XML-Ressourcendatei oder dem aktuellen Datenstrom abrufen kann.

GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IDisposable.Dispose()

Gibt die nicht verwalteten Ressourcen frei, die vom ResXResourceReader verwendet werden, und gibt optional die verwalteten Ressourcen frei. Eine Beschreibung dieses Elements finden Sie in der Dispose()-Methode.

IEnumerable.GetEnumerator()

Gibt einen Enumerator für das aktuelle ResXResourceReader -Objekt zurück. Eine Beschreibung dieses Elements finden Sie in der GetEnumerator()-Methode.

Erweiterungsmethoden

Cast<TResult>(IEnumerable)

Wandelt die Elemente eines IEnumerable in den angegebenen Typ um.

OfType<TResult>(IEnumerable)

Filtert die Elemente einer IEnumerable basierend auf einem angegebenen Typ.

AsParallel(IEnumerable)

Aktiviert die Parallelisierung einer Abfrage.

AsQueryable(IEnumerable)

Wandelt eine IEnumerable in eine IQueryableum.

Gilt für:

Weitere Informationen