Sdílet prostřednictvím


ResXResourceReader Třída

Definice

Vytvoří výčet souborů a datových proudů prostředků XML (.resx) a přeč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 ResXResourceReader iterovat prostředky v souboru .resx. Nejprve se vytvoří ResXResourceReaderrsxr pro soubor items.resx. Dále se metoda GetEnumerator používá k vytvoření IDictionaryEnumerator pro iteraci prostředků a zobrazení obsahu konzoly.

#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. Volejte metody z této třídy pouze s důvěryhodnými daty. Další informace naleznete 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 třídu ResourceReader.

Třídu ResXResourceReader použijete k vytvoření výčtu prostředků v souborech .resx procházením enumerátoru slovníku (IDictionaryEnumerator), který je vrácen metodou GetEnumerator. Metody poskytované IDictionaryEnumerator přejít k dalšímu prostředku a přečíst název a hodnotu každého prostředku v souboru .resx.

Poznámka

Třída ResXResourceReader poskytuje dva výčty. Metoda ResXResourceReader.GetEnumerator vrátí objekt IDictionaryEnumerator; Doporučujeme použít tuto metodu k vytvoření výčtu prostředků. ResXResourceReader.IEnumerable.GetEnumerator metoda je explicitní implementace rozhraní, která vrací IEnumerator objekt; nedoporučujeme jeho použití.

Následující příklad používá GetEnumerator metoda k získání IDictionaryEnumerator objektu, který slouží k vytvoření 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

Pokud je vlastnost UseResXDataNodestrue, hodnota vlastnosti IDictionaryEnumerator.Value je objekt ResXDataNode místo hodnoty prostředku. Tím zpřístupníte komentář k položce prostředku z vlastnosti ResXDataNode.Comment. Následující příklad nastaví UseResXDataNodes vlastnost 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 je UseResXDataNodestrue, mohou být ResXDataNode položky ve výčtu:

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

  • Pojmenované prostředky spolu s názvem souboru, který obsahuje data o prostředcích. V tomto případě ResXDataNode.FileRef vlastnost vrátí ResXFileRef objekt, 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 vlastnost BasePath tak, aby poskytovala referenční bod pro relativní cestu k souboru.

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

Poznámka

Třída ResXResourceReader obsahuje poptávku propojení a poptávku dědičnosti na úrovni třídy, která se vztahuje na všechny členy. Výjimka SecurityException je vyvolán, pokud buď bezprostřední volající, nebo odvozená třída nemá oprávnění úplné 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 třídy ResXResourceReader 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ředku XML a pole názvů sestavení.

ResXResourceReader(String, ITypeResolutionService)

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

ResXResourceReader(TextReader)

Inicializuje novou instanci třídy ResXResourceReader pro zadanou TextReader.

ResXResourceReader(TextReader, AssemblyName[])

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

ResXResourceReader(TextReader, ITypeResolutionService)

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

Vlastnosti

BasePath

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

UseResXDataNodes

Získá nebo nastaví hodnotu, která určuje, zda ResXDataNode objekty jsou 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é ResXResourceReader.

Dispose(Boolean)

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

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

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

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

FromFileContents(String)

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

FromFileContents(String, AssemblyName[])

Vytvoří nový objekt ResXResourceReader a inicializuje ho tak, aby četl řetězec, jehož obsah je ve formě souboru prostředků XML, a k překladu názvů typů zadaných v prostředku pomocí pole objektů AssemblyName.

FromFileContents(String, ITypeResolutionService)

Vytvoří nový objekt ResXResourceReader a inicializuje ho tak, aby četl řetězec, jehož obsah je ve formě souboru prostředků XML, a k překladu názvů typů zadaných v prostředku pomocí objektu ITypeResolutionService.

GetEnumerator()

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

GetHashCode()

Slouží jako výchozí funkce hash.

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

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

GetType()

Získá Type aktuální instance.

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

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

(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é ResXResourceReader a volitelně uvolní spravované prostředky. Popis tohoto člena najdete v Dispose() metodě.

IEnumerable.GetEnumerator()

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

Metody rozšíření

Cast<TResult>(IEnumerable)

Přetypuje prvky IEnumerable na zadaný typ.

OfType<TResult>(IEnumerable)

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

AsParallel(IEnumerable)

Umožňuje paralelizaci dotazu.

AsQueryable(IEnumerable)

Převede IEnumerable na IQueryable.

Platí pro

Viz také