ResourceReader ResourceReader ResourceReader ResourceReader Class

定義

順次リソースの名前と値のペアを読み取って、バイナリ リソース (.resources) ファイル内のリソースを列挙します。Enumerates the resources in a binary resources (.resources) file by reading sequential resource name/value pairs.

public ref class ResourceReader sealed : System::Resources::IResourceReader
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ResourceReader : System.Resources.IResourceReader
type ResourceReader = class
    interface IResourceReader
    interface IEnumerable
    interface IDisposable
Public NotInheritable Class ResourceReader
Implements IResourceReader
継承
ResourceReaderResourceReaderResourceReaderResourceReader
属性
実装

注釈

重要

このクラスのメソッドを信頼されていないデータを指定して呼び出すことには、セキュリティ上のリスクが伴います。Calling methods from this class with untrusted data is a security risk. このクラスのメソッドの呼び出しは、信頼されたデータだけを指定して実行してください。Call the methods from this class only with trusted data. 詳しくは、「Data Validation」(データの入力規則) を参照してください。For more information, see Data Validation.

クラスResourceReaderは、 IResourceReaderインターフェイスの標準的な実装を提供します。The ResourceReader class provides a standard implementation of the IResourceReader interface. インスタンスResourceReaderは、アセンブリに埋め込まれているスタンドアロンの .resources ファイルまたは .resources ファイルのいずれかを表します。A ResourceReader instance represents either a standalone .resources file or a .resources file that is embedded in an assembly. これは、.resources ファイル内のリソースを列挙し、その名前と値のペアを取得するために使用されます。It is used to enumerate the resources in a .resources file and retrieve its name/value pairs. これは、アセンブリResourceManagerに埋め込まれている .resources ファイルから指定された名前付きリソースを取得するために使用されるクラスとは異なります。It differs from the ResourceManager class, which is used to retrieve specified named resources from a .resources file that is embedded in an assembly. クラスは、事前に名前がわかっているリソースを取得するためにResourceReader使用されます。一方、クラスは、コンパイル時に数値または正確な名前がわからないリソースを取得する場合に役立ちます。 ResourceManagerThe ResourceManager class is used to retrieve resources whose names are known in advance, whereas the ResourceReader class is useful for retrieving resources whose number or precise names are not known at compile time. たとえば、リソースファイルを使用して、セクション内のセクションや項目にまとめられた構成情報を格納し、セクション内のセクションの数や項目を事前に把握していない場合などです。For example, an application may use a resources file to store configuration information that is organized into sections and items in a section, where the number of sections or items in a section is not known in advance. リソースSection1にはSection1Item1 、汎用的なResourceReader名前を付けることができます (たとえば、 、、など)。また、オブジェクトを使用して取得することもできます。Section1Item2Resources can then be named generically (such as Section1, Section1Item1, Section1Item2, and so on) and retrieved by using a ResourceReader object.

重要

この型は IDisposable インターフェイスを実装します。This type implements the IDisposable interface. 型の使用が完了したら、直接的または間接的に型を破棄する必要があります。When you have finished using the type, you should dispose of it either directly or indirectly. 直接的に型を破棄するには、try / catch ブロック内で Dispose メソッドを呼び出します。To dispose of the type directly, call its Dispose method in a try/catch block. 間接的に型を破棄するには、using (C# の場合) または Using (Visual Basic 言語) などの言語構成要素を使用します。To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). 詳細については、IDisposable インターフェイスに関するトピック内の「IDisposable を実装するオブジェクトの使用」セクションを参照してください。For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

クラスのResourceReader使用方法の詳細については、次のセクションを参照してください。For more information about using the ResourceReader class, see the following sections:

ResourceReader オブジェクトのインスタンス化Instantiating a ResourceReader Object

.Resources ファイルは、 resgen.exe (リソースファイルジェネレーター)によってテキストファイルまたは XML .resx ファイルからコンパイルされたバイナリファイルです。A .resources file is a binary file that has been compiled from either a text file or an XML .resx file by Resgen.exe (Resource File Generator). ResourceReaderオブジェクトは、アセンブリに埋め込まれているスタンドアロンの .resources ファイルまたは .resources ファイルを表すことができます。A ResourceReader object can represent either a standalone .resources file or a .resources file that has been embedded in an assembly.

スタンドアロン .resources ResourceReaderファイルから読み取るオブジェクトをインスタンス化するには、入力ResourceReaderストリームまたは .resources ファイル名を含む文字列のいずれかを使用して、クラスコンストラクターを使用します。To instantiate a ResourceReader object that reads from a standalone .resources file, use the ResourceReader class constructor with either an input stream or a string that contains the .resources file name. 次の例は、両方の方法を示しています。The following example illustrates both approaches. 最初のは、 ResourceReaderファイル名を使用して、とResources1.resourcesいう名前の .resources ファイルを表すオブジェクトをインスタンス化します。The first instantiates a ResourceReader object that represents a .resources file named Resources1.resources by using its file name. 2つ目はResourceReader 、ファイルから作成されたストリームResources2.resourcesを使用して、という名前の .resources ファイルを表すオブジェクトをインスタンス化します。The second instantiates a ResourceReader object that represents a .resources file named Resources2.resources by using a stream created from the file.

// Instantiate a standalone .resources file from its filename.
var rr1 = new System.Resources.ResourceReader("Resources1.resources");

// Instantiate a standalone .resources file from a stream.
var fs = new System.IO.FileStream(@".\Resources2.resources",
                                  System.IO.FileMode.Open);
var rr2 = new System.Resources.ResourceReader(fs);      
' Instantiate a standalone .resources file from its filename.
Dim rr1 As New System.Resources.ResourceReader("Resources1.resources")

' Instantiate a standalone .resources file from a stream.
Dim fs As New System.IO.FileStream(".\Resources2.resources",
                                   System.IO.FileMode.Open)
Dim rr2 As New System.Resources.ResourceReader(fs)      

埋め込み .resources ResourceReaderファイルを表すオブジェクトを作成するには、.resources Assemblyファイルが埋め込まれているアセンブリからオブジェクトをインスタンス化します。To create a ResourceReader object that represents an embedded .resources file, instantiate an Assembly object from the assembly in which the .resources file is embedded. このメソッドは、 Stream ResourceReader(Stream)コンストラクターに渡すことができるオブジェクトを返します。 Assembly.GetManifestResourceStreamIts Assembly.GetManifestResourceStream method returns a Stream object that can be passed to the ResourceReader(Stream) constructor. 次の例ではResourceReader 、埋め込み .resources ファイルを表すオブジェクトをインスタンス化します。The following example instantiates a ResourceReader object that represents an embedded .resources file.

System.Reflection.Assembly assem = 
             System.Reflection.Assembly.LoadFrom(@".\MyLibrary.dll"); 
System.IO.Stream fs = 
             assem.GetManifestResourceStream("MyCompany.LibraryResources.resources");
var rr = new System.Resources.ResourceReader(fs); 
Dim assem As System.Reflection.Assembly = 
             System.Reflection.Assembly.LoadFrom(".\MyLibrary.dll") 
Dim fs As System.IO.Stream = 
             assem.GetManifestResourceStream("MyCompany.LibraryResources.resources")
Dim rr As New System.Resources.ResourceReader(fs) 

ResourceReader オブジェクトのリソースを列挙するEnumerating a ResourceReader Object's Resources

.Resources ファイル内のリソースを列挙するには、 GetEnumeratorメソッドを呼び出します。これにより、オブジェクトがSystem.Collections.IDictionaryEnumerator返されます。To enumerate the resources in a .resources file, you call the GetEnumerator method, which returns an System.Collections.IDictionaryEnumerator object. あるリソースからIDictionaryEnumerator.MoveNext次のリソースに移動するには、メソッドを呼び出します。You call the IDictionaryEnumerator.MoveNext method to move from one resource to the next. .Resources ファイル内falseのすべてのリソースが列挙されている場合、メソッドはを返します。The method returns false when all the resources in the .resources file have been enumerated.

注意

クラスはResourceReader IEnumerableインターフェイスとIEnumerable.GetEnumeratorメソッドを実装しますが、メソッドは実装を提供しません。IEnumerable.GetEnumerator ResourceReader.GetEnumeratorAlthough the ResourceReader class implements the IEnumerable interface and the IEnumerable.GetEnumerator method, the ResourceReader.GetEnumerator method does not provide the IEnumerable.GetEnumerator implementation. 代わりに、メソッドResourceReader.GetEnumeratorは、各IDictionaryEnumeratorリソースの名前と値のペアへのアクセスを提供するインターフェイスオブジェクトを返します。Instead, the ResourceReader.GetEnumerator method returns an IDictionaryEnumerator interface object that provides access to each resource's name/value pair.

コレクション内の個々のリソースを取得するには、次の2つの方法があります。You can retrieve the individual resources in the collection in two ways:

  • System.Collections.IDictionaryEnumeratorコレクション内の各リソースを反復処理し、 System.Collections.IDictionaryEnumeratorプロパティを使用してリソースの名前と値を取得できます。You can iterate each resource in the System.Collections.IDictionaryEnumerator collection and use System.Collections.IDictionaryEnumerator properties to retrieve the resource name and value. すべてのリソースが同じ種類である場合、または各リソースのデータ型がわかっている場合は、この方法をお勧めします。We recommend this technique when all the resources are of the same type, or you know the data type of each resource.

  • コレクションをSystem.Collections.IDictionaryEnumerator反復処理し、 GetResourceDataメソッドを呼び出してリソースのデータを取得するときに、各リソースの名前を取得できます。You can retrieve the name of each resource when you iterate the System.Collections.IDictionaryEnumerator collection and call the GetResourceData method to retrieve the resource's data. 各リソースのデータ型がわからない場合や、前の方法で例外がスローされた場合は、この方法をお勧めします。We recommend this approach when you do not know the data type of each resource or if the previous approach throws exceptions.

IDictionaryEnumerator プロパティを使用したリソースの取得Retrieving Resources by Using IDictionaryEnumerator Properties

.Resources ファイル内のリソースを列挙する最初の方法では、各リソースの名前と値のペアを直接取得します。The first method of enumerating the resources in a .resources file involves directly retrieving each resource's name/value pair. IDictionaryEnumerator.MoveNextメソッドを呼び出してコレクション内の各リソースに移動した後、プロパティからリソース名IDictionaryEnumerator.Keyを取得し、 IDictionaryEnumerator.Valueプロパティからリソースデータを取得できます。After you call the IDictionaryEnumerator.MoveNext method to move to each resource in the collection, you can retrieve the resource name from the IDictionaryEnumerator.Key property and the resource data from the IDictionaryEnumerator.Value property.

次の例は、 IDictionaryEnumerator.KeyプロパティとIDictionaryEnumerator.Valueプロパティを使用して、.resources ファイル内の各リソースの名前と値を取得する方法を示しています。The following example shows how to retrieve the name and value of each resource in a .resources file by using the IDictionaryEnumerator.Key and IDictionaryEnumerator.Value properties. この例を実行するには、ApplicationResources という名前の次のテキストファイルを作成して、文字列リソースを定義します。To run the example, create the following text file named ApplicationResources.txt to define string resources.

Title="Contact Information"  
Label1="First Name:"  
Label2="Middle Name:"  
Label3="Last Name:"  
Label4="SSN:"  
Label5="Street Address:"  
Label6="City:"  
Label7="State:"  
Label8="Zip Code:"  
Label9="Home Phone:"  
Label10="Business Phone:"  
Label11="Mobile Phone:"  
Label12="Other Phone:"  
Label13="Fax:"  
Label14="Email Address:"  
Label15="Alternate Email Address:"  

その後、次のコマンドを使用して、テキストリソースファイルを ApplicationResources. .resources という名前のバイナリファイルに変換できます。You can then convert the text resource file to a binary file named ApplicationResources.resources by using the following command:

resgen.exe ApplicationResources .txtresgen ApplicationResources.txt

次の例では、 ResourceReaderクラスを使用して、スタンドアロンのバイナリ .resources ファイル内の各リソースを列挙し、そのキー名と対応する値を表示します。The following example then uses the ResourceReader class to enumerate each resource in the standalone binary .resources file and to display its key name and corresponding value.

using System;
using System.Collections;
using System.Resources;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("Resources in ApplicationResources.resources:");
      ResourceReader res = new ResourceReader(@".\ApplicationResources.resources");
      IDictionaryEnumerator dict = res.GetEnumerator();
      while (dict.MoveNext())
         Console.WriteLine("   {0}: '{1}' (Type {2})", 
                           dict.Key, dict.Value, dict.Value.GetType().Name);
      res.Close();
   }
}
// The example displays the following output:
//       Resources in ApplicationResources.resources:
//          Label3: '"Last Name:"' (Type String)
//          Label2: '"Middle Name:"' (Type String)
//          Label1: '"First Name:"' (Type String)
//          Label7: '"State:"' (Type String)
//          Label6: '"City:"' (Type String)
//          Label5: '"Street Address:"' (Type String)
//          Label4: '"SSN:"' (Type String)
//          Label9: '"Home Phone:"' (Type String)
//          Label8: '"Zip Code:"' (Type String)
//          Title: '"Contact Information"' (Type String)
//          Label12: '"Other Phone:"' (Type String)
//          Label13: '"Fax:"' (Type String)
//          Label10: '"Business Phone:"' (Type String)
//          Label11: '"Mobile Phone:"' (Type String)
//          Label14: '"Email Address:"' (Type String)
//          Label15: '"Alternate Email Address:"' (Type String)
Imports System.Collections
Imports System.Resources

Module Example
   Public Sub Main()
      Console.WriteLine("Resources in ApplicationResources.resources:")
      Dim res As New ResourceReader(".\ApplicationResources.resources")
      Dim dict As IDictionaryEnumerator = res.GetEnumerator()
      Do While dict.MoveNext()
         Console.WriteLine("   {0}: '{1}' (Type {2})", dict.Key, dict.Value, dict.Value.GetType().Name)
      Loop
      res.Close()
   End Sub
End Module
' The example displays output like the following:
'       Resources in ApplicationResources.resources:
'          Label3: '"Last Name:"' (Type String)
'          Label2: '"Middle Name:"' (Type String)
'          Label1: '"First Name:"' (Type String)
'          Label7: '"State:"' (Type String)
'          Label6: '"City:"' (Type String)
'          Label5: '"Street Address:"' (Type String)
'          Label4: '"SSN:"' (Type String)
'          Label9: '"Home Phone:"' (Type String)
'          Label8: '"Zip Code:"' (Type String)
'          Title: '"Contact Information"' (Type String)
'          Label12: '"Other Phone:"' (Type String)
'          Label13: '"Fax:"' (Type String)
'          Label10: '"Business Phone:"' (Type String)
'          Label11: '"Mobile Phone:"' (Type String)
'          Label14: '"Email Address:"' (Type String)
'          Label15: '"Alternate Email Address:"' (Type String)

IDictionaryEnumerator.Valueプロパティからリソースデータを取得しようとすると、次の例外がスローされる可能性があります。The attempt to retrieve resource data from the IDictionaryEnumerator.Value property can throw the following exceptions:

通常、これらの例外は、型が定義されているアセンブリがアプリケーションに含まれていないか、誤って削除されたか、またはアセンブリが登場の古いバージョンである場合に、.resources ファイルが手動で変更された場合にスローされます。型。Typically, these exceptions are thrown if the .resources file has been modified manually, if the assembly in which a type is defined has either not been included with an application or has been inadvertently deleted, or if the assembly is an older version that predates a type. これらの例外のいずれかがスローされた場合は、次のセクションに示すGetResourceDataように、各リソースを列挙し、メソッドを呼び出すことで、リソースを取得できます。If one of these exceptions is thrown, you can retrieve resources by enumerating each resource and calling the GetResourceData method, as the following section shows. この方法では、プロパティがIDictionaryEnumerator.Value返すデータ型に関する情報が提供されます。This approach provides you with some information about the data type that the IDictionaryEnumerator.Value property attempted to return.

GetResourceData を使用して名前でリソースを取得するRetrieving Resources by Name with GetResourceData

.Resources ファイル内のリソースを列挙する2番目の方法では、メソッドをIDictionaryEnumerator.MoveNext呼び出すことによって、ファイル内のリソースを移動する必要もあります。The second approach to enumerating resources in a .resources file also involves navigating through the resources in the file by calling the IDictionaryEnumerator.MoveNext method. リソースごとに、 IDictionaryEnumerator.Keyプロパティからリソースの名前を取得します。これは、リソースのデータを取得するためにGetResourceData(String, String, Byte[])メソッドに渡されます。For each resource, you retrieve the resource's name from the IDictionaryEnumerator.Key property, which is then passed to the GetResourceData(String, String, Byte[]) method to retrieve the resource's data. これは、 resourceData引数のバイト配列として返されます。This is returned as a byte array in the resourceData argument.

この方法は、リソースの値を形成する実際のバイト数IDictionaryEnumerator.KeyIDictionaryEnumerator.Value返すため、プロパティとプロパティからリソースの名前と値を取得するよりも扱いにくくなります。This approach is more awkward than retrieving the resource name and value from the IDictionaryEnumerator.Key and IDictionaryEnumerator.Value properties, because it returns the actual bytes that form the resource value. ただし、リソースを取得しようとしたときに例外がGetResourceDataスローされた場合、メソッドは、リソースのデータ型に関する情報を提供することによって、例外の原因を特定するのに役立ちます。However, if the attempt to retrieve the resource throws an exception, the GetResourceData method can help identify the source of the exception by supplying information about the resource's data type. リソースのデータ型を示す文字列の詳細については、「 GetResourceData」を参照してください。For more information about the string that indicates the resource's data type, see GetResourceData.

次の例は、この方法を使用してリソースを取得し、スローされた例外を処理する方法を示しています。The following example illustrates how to use this approach to retrieve resources and to handle any exceptions that are thrown. プログラムによって、4つの文字列、1つのブール値、1つの整数、1つのビットマップDateTimeTZI 、および1つのカスタムオブジェクトを含むバイナリ .resources ファイルを作成します。It programmatically creates a binary .resources file that contains four strings, one Boolean, one integer, one bitmap, and one custom DateTimeTZI object. この例を実行するには、次の手順を実行します。To run the example, do the following:

  1. 構造体を含む、 DateTimeTZI Library という名前のアセンブリを作成します。Create an assembly named Library.dll that contains the DateTimeTZI structure. アセンブリのソースコードを次に示します。The following is the source code for the assembly.

    using System;
    
    [Serializable] public struct DateTimeTZI
    {
      DateTime Date;
      TimeZoneInfo TimeZone;
       
      public DateTimeTZI(DateTime date, TimeZoneInfo tz)
      {
         this.Date = date;
         this.TimeZone = tz;
      }
    
       public override string ToString()
       {
         return String.Format("{0:dd/MM/yyyy hh:mm:ss tt} {1}", 
                              Date, TimeZone.StandardName);
       }
    }
    
    <Serializable> Public Structure DateTimeTZI
      Dim [Date] As DateTime
      Dim TimeZone As TimeZoneInfo
       
      Public Sub New([date] As DateTime, tz As TimeZoneInfo)
         Me.[Date] = [date]
         Me.TimeZone = tz
      End Sub
      
      Public Overrides Function ToString() As String
         Return String.Format("{0:dd/MM/yyyy hh:mm:ss tt} {1}", 
                              [Date], TimeZone.StandardName)
      End Function
    End Structure
    

    次のコマンドを使用C#して、でソースコードをコンパイルします。Compile the source code in C# by using the following command:

    csc /t:library library.cs  
    

    または、次のコマンドを使用して Visual Basic でコンパイルすることもできます。Or, you can compile it in Visual Basic by using the following command:

    vbc library.vb /t:library  
    
  2. 次のソースコードをコンパイルして実行します。これにより、ContactResources という名前の .resources ファイルが作成されます。Compile and execute the following source code, which creates a .resources file named ContactResources.resources.

    using System;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Resources;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Text;
    
    
    public class Example
    {
       public static void Main()
       {
          // Bitmap as stream.
          MemoryStream bitmapStream = new MemoryStream();
          Bitmap bmp = new Bitmap(@".\ContactsIcon.jpg");
          bmp.Save(bitmapStream, ImageFormat.Jpeg);
              
          // Define resources to be written.
          using (ResourceWriter rw = new ResourceWriter(@".\ContactResources.resources"))
          {
             rw.AddResource("Title", "Contact List");
             rw.AddResource("NColumns", 5);         
             rw.AddResource("Icon", bitmapStream);         
             rw.AddResource("Header1", "Name");
             rw.AddResource("Header2", "City");
             rw.AddResource("Header3", "State");  
             rw.AddResource("VersionDate", new DateTimeTZI(
                            new DateTime(2012, 5, 18),  
                            TimeZoneInfo.Local));
             rw.AddResource("ClientVersion", true);
             rw.Generate();
          }
       }
    }
    
    Imports System.Drawing
    Imports System.IO
    Imports System.Resources
    Imports System.Runtime.Serialization.Formatters.Binary
    
    Imports System.Text
    
    Module Example
       Public Sub Main()
          ' Bitmap as stream.
          Dim bitmapStream As New MemoryStream()
          Dim bmp As New Bitmap(".\ContactsIcon.jpg")
          bmp.Save(bitmapStream, Imaging.ImageFormat.jpeg)
              
          ' Define resources to be written.
          Using rw As New ResourceWriter(".\ContactResources.resources")
             rw.AddResource("Title", "Contact List")
             rw.AddResource("NColumns", 5)         
             rw.AddResource("Icon", bitmapStream)         
             rw.AddResource("Header1", "Name")
             rw.AddResource("Header2", "City")
             rw.AddResource("Header3", "State")  
             rw.AddResource("VersionDate", New DateTimeTZI(#05/18/2012#, 
                                                           TimeZoneInfo.Local))
             rw.AddResource("ClientVersion", True)
             rw.Generate()
          End Using
       End Sub
    End Module
    

    ソースコードファイルには CreateResources.cs という名前が付けられています。The source code file is named CreateResources.cs. 次のコマンドを使用C#して、でコンパイルできます。You can compile it in C# by using the following command:

    csc CreateResources.cs /r:library.dll  
    

    または、次のコマンドを使用して Visual Basic でコンパイルすることもできます。Or, you can compile it in Visual Basic by using the following command:

    vbc CreateResources.vb /r:library.dll  
    
  3. 次のコードをコンパイルして実行し、ContactResources .resources ファイル内のリソースを列挙します。Compile and run the following code to enumerate the resources in the ContactResources.resources file.

    using System;
    using System.Collections;
    using System.Drawing;
    using System.IO;
    using System.Resources;
    using System.Runtime.Serialization.Formatters.Binary;
    
    public class Example
    {
       public static void Main()
       {
          ResourceReader rdr = new ResourceReader(@".\ContactResources.resources");  
          IDictionaryEnumerator dict = rdr.GetEnumerator();
          while (dict.MoveNext()) {
             Console.WriteLine("Resource Name: {0}", dict.Key);
             try {
                Console.WriteLine("   Value: {0}", dict.Value);
             }
             catch (FileNotFoundException) {
                Console.WriteLine("   Exception: A file cannot be found.");
                DisplayResourceInfo(rdr, (string) dict.Key, false);
             }
             catch (FormatException) {
                Console.WriteLine("   Exception: Corrupted data.");
                DisplayResourceInfo(rdr, (string) dict.Key, true);
             }
             catch (TypeLoadException) {
                Console.WriteLine("   Exception: Cannot load the data type.");
                DisplayResourceInfo(rdr, (string) dict.Key, false);   
             }
          } 
       }
    
       private static void DisplayResourceInfo(ResourceReader rr, 
                                       string key, bool loaded)
       {                                
          string dataType = null;
          byte[] data = null;
          rr.GetResourceData(key, out dataType, out data);
                
          // Display the data type.
          Console.WriteLine("   Data Type: {0}", dataType);
          // Display the bytes that form the available data.      
          Console.Write("   Data: ");
          int lines = 0;
          foreach (var dataItem in data) {
             lines++;
             Console.Write("{0:X2} ", dataItem);
             if (lines % 25 == 0)
                Console.Write("\n         ");
          }
          Console.WriteLine();
          // Try to recreate current state of  data.
          // Do: Bitmap, DateTimeTZI
          switch (dataType) 
          {  
             // Handle internally serialized string data (ResourceTypeCode members).
             case "ResourceTypeCode.String":
                BinaryReader reader = new BinaryReader(new MemoryStream(data));
                string binData = reader.ReadString();
                Console.WriteLine("   Recreated Value: {0}", binData);
                break;
             case "ResourceTypeCode.Int32":
                Console.WriteLine("   Recreated Value: {0}", 
                                  BitConverter.ToInt32(data, 0));
                break;
             case "ResourceTypeCode.Boolean":
                Console.WriteLine("   Recreated Value: {0}", 
                                  BitConverter.ToBoolean(data, 0));
                break;
             // .jpeg image stored as a stream.
             case "ResourceTypeCode.Stream":  
                const int OFFSET = 4;
                int size = BitConverter.ToInt32(data, 0);
                Bitmap value1 = new Bitmap(new MemoryStream(data, OFFSET, size));
                Console.WriteLine("   Recreated Value: {0}", value1); 
                break;
             // Our only other type is DateTimeTZI.
             default:
                // No point in deserializing data if the type is unavailable.
                if (dataType.Contains("DateTimeTZI") && loaded) { 
                   BinaryFormatter binFmt = new BinaryFormatter();
                   object value2 = binFmt.Deserialize(new MemoryStream(data));
                   Console.WriteLine("   Recreated Value: {0}", value2);
                }    
                break;
          }
          Console.WriteLine();
       }
    }
    
    Imports System.Collections
    Imports System.Drawing
    Imports System.IO
    Imports System.Resources
    Imports System.Runtime.Serialization.Formatters.Binary
    
    Module Example
       Public Sub Main()
          Dim rdr As New ResourceReader(".\ContactResources.resources")  
          Dim dict As IDictionaryEnumerator = rdr.GetEnumerator()
          Do While dict.MoveNext()
             Console.WriteLine("Resource Name: {0}", dict.Key)
             Try
                Console.WriteLine("   Value: {0}", dict.Value)
             Catch e As FileNotFoundException
                Console.WriteLine("   Exception: A file cannot be found.")
                DisplayResourceInfo(rdr, CStr(dict.Key), False)
             Catch e As FormatException
                Console.WriteLine("   Exception: Corrupted data.")
                DisplayResourceInfo(rdr, CStr(dict.Key), True)
             Catch e As TypeLoadException
                Console.WriteLine("   Exception: Cannot load the data type.")
                DisplayResourceInfo(rdr, CStr(dict.Key), False)   
             End Try
          Loop 
       End Sub
    
       Private Sub DisplayResourceInfo(rr As ResourceReader, 
                                       key As String, loaded As Boolean)
          Dim dataType As String = Nothing
          Dim data() As Byte = Nothing
          rr.GetResourceData(key, dataType, data)
                
          ' Display the data type.
          Console.WriteLine("   Data Type: {0}", dataType)
          ' Display the bytes that form the available data.      
          Console.Write("   Data: ")
          Dim lines As Integer = 0
          For Each dataItem In data
             lines += 1
             Console.Write("{0:X2} ", dataItem)
             If lines Mod 25 = 0 Then Console.Write("{0}         ", vbCrLf)
          Next
          Console.WriteLine()
          ' Try to recreate current state of  data.
          ' Do: Bitmap, DateTimeTZI
          Select Case dataType   
             ' Handle internally serialized string data (ResourceTypeCode members).
             Case "ResourceTypeCode.String"
                Dim reader As New BinaryReader(New MemoryStream(data))
                Dim binData As String = reader.ReadString()
                Console.WriteLine("   Recreated Value: {0}", binData)
             Case "ResourceTypeCode.Int32"
                Console.WriteLine("   Recreated Value: {0}", 
                                  BitConverter.ToInt32(data, 0))
             Case "ResourceTypeCode.Boolean"
                Console.WriteLine("   Recreated Value: {0}", 
                                  BitConverter.ToBoolean(data, 0))
             ' .jpeg image stored as a stream.
             Case "ResourceTypeCode.Stream"  
                Const OFFSET As Integer = 4
                Dim size As Integer = BitConverter.ToInt32(data, 0)
                Dim value As New Bitmap(New MemoryStream(data, OFFSET, size))
                Console.WriteLine("   Recreated Value: {0}", value) 
             ' Our only other type is DateTimeTZI.
             Case Else
                ' No point in deserializing data if the type is unavailable.
                If dataType.Contains("DateTimeTZI") And loaded Then 
                   Dim binFmt As New BinaryFormatter()
                   Dim value As Object = binFmt.Deserialize(New MemoryStream(data))
                   Console.WriteLine("   Recreated Value: {0}", value)
                End If    
          End Select
          Console.WriteLine()
       End Sub
    End Module
    

    ソースコードを変更した後 (たとえば、 FormatException tryブロックの末尾にを意図的にスローすることによって)、またはライブラリの .dll アセンブリの名前を変更して実行時に使用できないようにGetResourceDataするには、例を実行して、の呼び出し方法を確認します。リソース情報を取得または再作成できるようにします。After modifying the source code (for example, by deliberately throwing a FormatException at the end of the try block) or renaming the Library.dll assembly so that it is unavailable at runtime, you can run the example to see how calls to GetResourceData enable you to retrieve or recreate some resource information.

コンストラクター

ResourceReader(Stream) ResourceReader(Stream) ResourceReader(Stream) ResourceReader(Stream)

指定したストリーム用の ResourceReader クラスの新しいインスタンスを初期化します。Initializes a new instance of the ResourceReader class for the specified stream.

ResourceReader(String) ResourceReader(String) ResourceReader(String) ResourceReader(String)

リソース ファイルを指定して ResourceReader クラスの新しいインスタンスを初期化します。Initializes a new instance of the ResourceReader class for the specified named resource file.

メソッド

Close() Close() Close() Close()

この ResourceReader オブジェクトに関連付けられたすべてのオペレーティング システム リソースを解放します。Releases all operating system resources associated with this ResourceReader object.

Dispose() Dispose() Dispose() Dispose()

ResourceReader クラスの現在のインスタンスによって使用されているすべてのリソースを解放します。Releases all resources used by the current instance of the ResourceReader class.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetEnumerator() GetEnumerator() GetEnumerator() GetEnumerator()

この ResourceReader オブジェクトの列挙子を返します。Returns an enumerator for this ResourceReader object.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetResourceData(String, String, Byte[]) GetResourceData(String, String, Byte[]) GetResourceData(String, String, Byte[]) GetResourceData(String, String, Byte[])

オープン リソース ファイルまたはストリームから名前付きリソースの型名とデータを取得します。Retrieves the type name and data of a named resource from an open resource file or stream.

GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

明示的なインターフェイスの実装

IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose()

ResourceReader で使用したリソースを解放します。Releases the resources used by the ResourceReader.

IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator()

この ResourceReader オブジェクトの列挙子を返します。Returns an enumerator for this ResourceReader object.

拡張メソッド

Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable)

IEnumerable の要素を、指定した型にキャストします。Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable)

指定された型に基づいて IEnumerable の要素をフィルター処理します。Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable)

クエリの並列化を有効にします。Enables parallelization of a query.

AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable)

IEnumerableIQueryable に変換します。Converts an IEnumerable to an IQueryable.

適用対象