Udostępnij za pośrednictwem


ResXResourceReader Klasa

Definicja

Wylicza pliki i strumienie zasobów XML (resx) oraz odczytuje sekwencyjną nazwę zasobu i pary wartości.

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
Dziedziczenie
ResXResourceReader
Implementuje

Przykłady

W poniższym przykładzie pokazano, jak używać ResXResourceReader do iterowania zasobów w pliku resx. Najpierw ResXResourceReaderrsxr jest tworzony dla pliku items.resx. Następnie metoda GetEnumerator służy do tworzenia IDictionaryEnumerator do iterowania zasobów i wyświetlania zawartości w konsoli.

#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

Uwagi

Ważny

Wywoływanie metod z tej klasy z niezaufanymi danymi jest zagrożeniem bezpieczeństwa. Wywołaj metody z tej klasy tylko z zaufanymi danymi. Aby uzyskać więcej informacji, zobacz Validate All Inputs.

Klasa ResXResourceReader udostępnia domyślną implementację interfejsu IResourceReader, który odczytuje informacje o zasobach w formacie XML. Aby odczytać informacje o zasobie z formatu zasobu binarnego, użyj klasy ResourceReader.

Klasa ResXResourceReader służy do wyliczania zasobów w plikach resx przez przechodzenie przez moduł wyliczający słownika (IDictionaryEnumerator), który jest zwracany przez metodę GetEnumerator. Metody udostępniane przez IDictionaryEnumerator można wywołać, aby przejść do następnego zasobu i odczytać nazwę i wartość każdego zasobu w pliku resx.

Nuta

Klasa ResXResourceReader udostępnia dwa moduły wyliczania. Metoda ResXResourceReader.GetEnumerator zwraca obiekt IDictionaryEnumerator; Zalecamy użycie tej metody do wyliczania zasobów. Metoda ResXResourceReader.IEnumerable.GetEnumerator jest jawną implementacją interfejsu, która zwraca obiekt IEnumerator; Nie zalecamy jego użycia.

W poniższym przykładzie użyto metody GetEnumerator w celu uzyskania obiektu IDictionaryEnumerator używanego do wyliczania zasobów w pliku resx. Przykład zawiera procedurę CreateResourceFile, która tworzy wymagany plik zasobów.

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

Jeśli właściwość UseResXDataNodes jest true, wartość właściwości IDictionaryEnumerator.Value jest obiektem ResXDataNode, a nie wartością zasobu. Spowoduje to udostępnienie komentarza elementu zasobu z właściwości ResXDataNode.Comment. Poniższy przykład ustawia właściwość UseResXDataNodes na true i wylicza zasoby w pliku 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

Jeśli UseResXDataNodes jest true, elementy ResXDataNode w wyliczaniu mogą być następujące:

  • Nazwane zasoby wraz z danymi. W tym przypadku właściwość ResXDataNode.FileRef jest null.

  • Nazwane zasoby wraz z nazwą pliku zawierającego dane zasobu. W tym przypadku właściwość ResXDataNode.FileRef zwraca obiekt ResXFileRef zawierający informacje o zasobie, w tym jego nazwę pliku. Jeśli są używane względne nazwy plików, należy zawsze ustawić właściwość BasePath, aby zapewnić punkt odniesienia dla względnej ścieżki pliku.

Jeśli chcesz pobrać nazwane zasoby z pliku resx, a nie wyliczać jego zasobów, możesz utworzyć wystąpienie obiektu ResXResourceSet i wywołać jego metody GetString i GetObject.

Nuta

Klasa ResXResourceReader zawiera żądanie łącza i żądanie dziedziczenia na poziomie klasy, który ma zastosowanie do wszystkich elementów członkowskich. Wyjątek SecurityException jest zgłaszany, gdy bezpośredni obiekt wywołujący lub klasa pochodna nie ma uprawnienia pełnego zaufania.

Konstruktory

ResXResourceReader(Stream)

Inicjuje nowe wystąpienie klasy ResXResourceReader dla określonego strumienia.

ResXResourceReader(Stream, AssemblyName[])

Inicjuje nowe wystąpienie klasy ResXResourceReader przy użyciu strumienia i tablicy nazw zestawów.

ResXResourceReader(Stream, ITypeResolutionService)

Inicjuje nowe wystąpienie klasy ResXResourceReader przy użyciu strumienia wejściowego i usługi rozpoznawania typów.

ResXResourceReader(String)

Inicjuje nowe wystąpienie klasy ResXResourceReader dla określonego pliku zasobu.

ResXResourceReader(String, AssemblyName[])

Inicjuje nowe wystąpienie klasy ResXResourceReader przy użyciu nazwy pliku zasobów XML i tablicy nazw zestawów.

ResXResourceReader(String, ITypeResolutionService)

Inicjuje nowe wystąpienie klasy ResXResourceReader przy użyciu nazwy pliku i usługi rozpoznawania typów.

ResXResourceReader(TextReader)

Inicjuje nowe wystąpienie klasy ResXResourceReader dla określonego TextReader.

ResXResourceReader(TextReader, AssemblyName[])

Inicjuje nowe wystąpienie klasy ResXResourceReader przy użyciu obiektu TextReader i tablicy nazw zestawów.

ResXResourceReader(TextReader, ITypeResolutionService)

Inicjuje nowe wystąpienie klasy ResXResourceReader przy użyciu czytnika strumienia tekstu i usługi rozpoznawania typów.

Właściwości

BasePath

Pobiera lub ustawia ścieżkę podstawową dla ścieżki pliku względnego określonego w obiekcie ResXFileRef.

UseResXDataNodes

Pobiera lub ustawia wartość wskazującą, czy ResXDataNode obiekty są zwracane podczas odczytywania bieżącego pliku zasobu XML lub strumienia.

Metody

Close()

Zwalnia wszystkie zasoby używane przez ResXResourceReader.

Dispose(Boolean)

Zwalnia niezarządzane zasoby używane przez ResXResourceReader i opcjonalnie zwalnia zarządzane zasoby.

Equals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi.

(Odziedziczone po Object)
Finalize()

Ten element członkowski zastępuje metodę Finalize().

FromFileContents(String)

Tworzy nowy obiekt ResXResourceReader i inicjuje go w celu odczytania ciągu, którego zawartość jest w postaci pliku zasobów XML.

FromFileContents(String, AssemblyName[])

Tworzy nowy obiekt ResXResourceReader i inicjuje go do odczytywania ciągu, którego zawartość jest w postaci pliku zasobów XML, oraz do używania tablicy obiektów AssemblyName do rozpoznawania nazw typów określonych w zasobie.

FromFileContents(String, ITypeResolutionService)

Tworzy nowy obiekt ResXResourceReader i inicjuje go w celu odczytania ciągu, którego zawartość jest w postaci pliku zasobów XML, oraz do rozpoznawania nazw typów określonych w zasobie za pomocą obiektu ITypeResolutionService.

GetEnumerator()

Zwraca moduł wyliczający dla bieżącego obiektu ResXResourceReader.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetMetadataEnumerator()

Udostępnia moduł wyliczający słownik, który może pobierać właściwości czasu projektowania z bieżącego pliku zasobu XML lub strumienia.

GetType()

Pobiera Type bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Object.

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

IDisposable.Dispose()

Zwalnia niezarządzane zasoby używane przez ResXResourceReader i opcjonalnie zwalnia zarządzane zasoby. Aby uzyskać opis tego elementu członkowskiego, zobacz metodę Dispose().

IEnumerable.GetEnumerator()

Zwraca moduł wyliczający dla bieżącego obiektu ResXResourceReader. Aby uzyskać opis tego elementu członkowskiego, zobacz metodę GetEnumerator().

Metody rozszerzania

Cast<TResult>(IEnumerable)

Rzutuje elementy IEnumerable do określonego typu.

OfType<TResult>(IEnumerable)

Filtruje elementy IEnumerable na podstawie określonego typu.

AsParallel(IEnumerable)

Umożliwia równoległość zapytania.

AsQueryable(IEnumerable)

Konwertuje IEnumerable na IQueryable.

Dotyczy

Zobacz też