Поделиться через


ResXResourceReader Класс

Определение

Перечисляет файлы и потоки XML-ресурса (RESX) и считывает последовательные пары ресурсов и значений.

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
Наследование
ResXResourceReader
Реализации

Примеры

В следующем примере показано, как использовать ResXResourceReader для итерации ресурсов в RESX-файле. Во-первых, ResXResourceReaderrsxr создается для items.resxфайла. Затем метод GetEnumerator используется для создания IDictionaryEnumerator для итерации ресурсов и отображения содержимого в консоли.

#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

Комментарии

Важный

Вызов методов из этого класса с ненадежными данными является угрозой безопасности. Вызовите методы из этого класса только с доверенными данными. Дополнительные сведения см. в разделе Проверка всех входных данных.

Класс ResXResourceReader предоставляет реализацию интерфейса IResourceReader по умолчанию, который считывает сведения о ресурсах в формате XML. Чтобы считывать сведения о ресурсах из двоичного формата ресурсов, используйте класс ResourceReader.

Класс ResXResourceReader используется для перечисления ресурсов в RESX-файлах путем обхода перечислителя словаря (IDictionaryEnumerator), возвращаемого методом GetEnumerator. Методы, предоставляемые IDictionaryEnumerator для перехода к следующему ресурсу, и для чтения имени и значения каждого ресурса в RESX-файле.

Заметка

Класс ResXResourceReader предоставляет два перечислителя. Метод ResXResourceReader.GetEnumerator возвращает объект IDictionaryEnumerator; Мы рекомендуем использовать этот метод для перечисления ресурсов. Метод ResXResourceReader.IEnumerable.GetEnumerator — это явная реализация интерфейса, которая возвращает объект IEnumerator; Мы не рекомендуем использовать его.

В следующем примере метод GetEnumerator используется для получения объекта IDictionaryEnumerator, используемого для перечисления ресурсов в RESX-файле. В этом примере содержится CreateResourceFile подпрограмма, которая создает необходимый файл ресурсов.

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

Если свойство UseResXDataNodestrue, значение свойства IDictionaryEnumerator.Value является объектом ResXDataNode, а не значением ресурса. Это делает комментарий элемента ресурса доступным из свойства ResXDataNode.Comment. В следующем примере свойство UseResXDataNodes устанавливается для true и перечисляет ресурсы в 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

Если UseResXDataNodestrue, элементы ResXDataNode перечисления могут быть следующими:

  • Именованные ресурсы вместе с данными. В этом случае свойство ResXDataNode.FileRefnull.

  • Именованные ресурсы вместе с именем файла, содержащего данные ресурса. В этом случае свойство ResXDataNode.FileRef возвращает объект ResXFileRef, предоставляющий сведения о ресурсе, включая его имя файла. Если используются относительные имена файлов, всегда следует задать свойство BasePath, чтобы указать эталонную точку для относительного пути к файлу.

Если вы хотите получить именованные ресурсы из RESX-файла, а не перечислять свои ресурсы, можно создать экземпляр объекта ResXResourceSet и вызвать его GetString и методы GetObject.

Заметка

Класс ResXResourceReader содержит запрос ссылки и наследование на уровне класса, который применяется ко всем членам. Исключение SecurityException возникает, если непосредственный вызывающий объект или производный класс не имеет разрешения на полное доверие.

Конструкторы

ResXResourceReader(Stream)

Инициализирует новый экземпляр класса ResXResourceReader для указанного потока.

ResXResourceReader(Stream, AssemblyName[])

Инициализирует новый экземпляр класса ResXResourceReader с помощью потока и массива имен сборок.

ResXResourceReader(Stream, ITypeResolutionService)

Инициализирует новый экземпляр класса ResXResourceReader с помощью входного потока и службы разрешения типов.

ResXResourceReader(String)

Инициализирует новый экземпляр класса ResXResourceReader для указанного файла ресурсов.

ResXResourceReader(String, AssemblyName[])

Инициализирует новый экземпляр класса ResXResourceReader с помощью имени файла ресурсов XML и массива имен сборок.

ResXResourceReader(String, ITypeResolutionService)

Инициализирует новый экземпляр класса ResXResourceReader с помощью имени файла и службы разрешения типов.

ResXResourceReader(TextReader)

Инициализирует новый экземпляр класса ResXResourceReader для указанного TextReader.

ResXResourceReader(TextReader, AssemblyName[])

Инициализирует новый экземпляр класса ResXResourceReader с помощью объекта TextReader и массива имен сборок.

ResXResourceReader(TextReader, ITypeResolutionService)

Инициализирует новый экземпляр класса ResXResourceReader с помощью средства чтения потока текста и службы разрешения типов.

Свойства

BasePath

Возвращает или задает базовый путь для относительного пути к файлу, указанному в объекте ResXFileRef.

UseResXDataNodes

Возвращает или задает значение, указывающее, возвращаются ли объекты ResXDataNode при чтении текущего XML-файла ресурсов или потока.

Методы

Close()

Освобождает все ресурсы, используемые ResXResourceReader.

Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые ResXResourceReader, и при необходимости освобождает управляемые ресурсы.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
Finalize()

Этот элемент переопределяет метод Finalize().

FromFileContents(String)

Создает новый объект ResXResourceReader и инициализирует его для чтения строки, содержимое которой содержится в виде XML-файла ресурсов.

FromFileContents(String, AssemblyName[])

Создает новый объект ResXResourceReader и инициализирует его для чтения строки, содержимое которой содержится в виде XML-файла ресурсов, а также для разрешения имен типов, указанных в ресурсе, массив объектов AssemblyName.

FromFileContents(String, ITypeResolutionService)

Создает новый объект ResXResourceReader и инициализирует его для чтения строки, содержимое которой содержится в виде XML-файла ресурсов, и для разрешения имен типов, указанных в ресурсе, с помощью объекта ITypeResolutionService.

GetEnumerator()

Возвращает перечислитель для текущего объекта ResXResourceReader.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetMetadataEnumerator()

Предоставляет перечислитель словаря, который может получить свойства времени разработки из текущего XML-файла ресурсов или потока.

GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

IDisposable.Dispose()

Освобождает неуправляемые ресурсы, используемые ResXResourceReader, и при необходимости освобождает управляемые ресурсы. Описание этого элемента см. в Dispose() методе.

IEnumerable.GetEnumerator()

Возвращает перечислитель для текущего объекта ResXResourceReader. Описание этого элемента см. в GetEnumerator() методе.

Методы расширения

Cast<TResult>(IEnumerable)

Приведение элементов IEnumerable к указанному типу.

OfType<TResult>(IEnumerable)

Фильтрует элементы IEnumerable на основе указанного типа.

AsParallel(IEnumerable)

Включает параллелизацию запроса.

AsQueryable(IEnumerable)

Преобразует IEnumerable в IQueryable.

Применяется к

См. также раздел