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 、リソース情報を XML 形式で読み取るインターフェイスの既定の実装 IResourceReader を提供します。 バイナリ リソース形式からリソース情報を読み取る場合は、 クラスを使用します ResourceReader

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

注意

クラスには ResXResourceReader 、2 つの列挙子が用意されています。 メソッドは 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

プロパティが のUseResXDataNodes場合、プロパティのIDictionaryEnumerator.Value値はResXDataNodeリソース値ではなくオブジェクトtrueです。 これにより、 プロパティからリソース アイテムのコメントを ResXDataNode.Comment 使用できるようになります。 次の例では、 プロパティを UseResXDataNodestrue 設定し、.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

が のtrue場合UseResXDataNodesResXDataNode列挙体の項目は次のいずれかになります。

  • 名前付きリソースとそのデータ。 この場合、 ResXDataNode.FileRef プロパティは です null

  • 名前付きリソースと、リソース データを含むファイルの名前。 この場合、 プロパティは ResXDataNode.FileRef 、そのファイル名を ResXFileRef 含むリソースに関する情報を提供する オブジェクトを返します。 相対ファイル名を使用する場合は、常に プロパティを BasePath 設定して、相対ファイル パスの参照ポイントを指定する必要があります。

リソースを列挙するのではなく、.resx ファイルから名前付きリソースを取得する場合は、オブジェクトをインスタンス化 ResXResourceSet し、その GetStringGetObject および メソッドを呼び出すことができます。

注意

クラスには 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 リソース ファイルまたは 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 リソース ファイルまたは 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 に変換します。

適用対象

こちらもご覧ください