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 ファイル内のリソースを反復処理する方法を示します。 まず、ファイル items.resxResXResourceReaderrsxr が作成されます。 次に、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 クラスは、リソース情報を XML 形式で読み取る IResourceReader インターフェイスの既定の実装を提供します。 バイナリ リソース形式からリソース情報を読み取る場合は、ResourceReader クラスを使用します。

ResXResourceReader クラスを使用して.resx ファイル内のリソースを列挙するには、GetEnumerator メソッドによって返されるディクショナリ列挙子 (IDictionaryEnumerator) を走査します。 IDictionaryEnumerator によって提供されるメソッドを呼び出して、次のリソースに進み、.resx ファイル内の各リソースの名前と値を読み取ります。

手記

ResXResourceReader クラスには、2 つの列挙子が用意されています。 ResXResourceReader.GetEnumerator メソッドは、IDictionaryEnumerator オブジェクトを返します。このメソッドを使用してリソースを列挙することをお勧めします。 ResXResourceReader.IEnumerable.GetEnumerator メソッドは、IEnumerator オブジェクトを返す明示的なインターフェイス実装です。その使用はお勧めしません。

次の例では、GetEnumerator メソッドを使用して、.resx ファイル内のリソースを列挙するために使用される IDictionaryEnumerator オブジェクトを取得します。 この例には、必要なリソース ファイルを作成する 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

UseResXDataNodes プロパティが true場合、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.FileRef プロパティは null

  • 名前付きリソースと、リソース データを含むファイルの名前。 この場合、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[])

XML リソース ファイル名とアセンブリ名の配列を使用して、ResXResourceReader クラスの新しいインスタンスを初期化します。

ResXResourceReader(String, ITypeResolutionService)

ファイル名と型解決サービスを使用して、ResXResourceReader クラスの新しいインスタンスを初期化します。

ResXResourceReader(TextReader)

指定した TextReaderResXResourceReader クラスの新しいインスタンスを初期化します。

ResXResourceReader(TextReader, AssemblyName[])

TextReader オブジェクトとアセンブリ名の配列を使用して、ResXResourceReader クラスの新しいインスタンスを初期化します。

ResXResourceReader(TextReader, ITypeResolutionService)

テキスト ストリーム リーダーと型解決サービスを使用して、ResXResourceReader クラスの新しいインスタンスを初期化します。

プロパティ

BasePath

ResXFileRef オブジェクトで指定された相対ファイル パスの基本パスを取得または設定します。

UseResXDataNodes

現在の XML リソース ファイルまたはストリームの読み取り時 ResXDataNode オブジェクトが返されるかどうかを示す値を取得または設定します。

メソッド

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)

IEnumerableIQueryableに変換します。

適用対象

こちらもご覧ください