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. AResourceReaderインスタンスはスタンドアロンの .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. ResourceManagerに対し、名前を持つが、事前に認識されているリソースを取得するクラスが使用される、ResourceReaderクラスは、数または正確な名前を持つはコンパイル時に、不明のリソースを取得するために便利です。The 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. リソースは一般的に、ということができます (などSection1Section1Item1Section1Item2など) を使用して取得し、ResourceReaderオブジェクト。Resources 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 ファイルはテキスト ファイルまたはによって XML .resx ファイルからコンパイルされたバイナリ ファイルResgen.exe (リソース ファイル ジェネレーター)します。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). AResourceReaderオブジェクトは、スタンドアロンの .resources ファイルまたはアセンブリに埋め込まれた .resources ファイルのいずれかを表すことができます。A ResourceReader object can represent either a standalone .resources file or a .resources file that has been embedded in an assembly.

インスタンス化する、ResourceReaderオブジェクトをスタンドアロン .resources ファイルから読み取り、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という名前の .resources ファイルを表すオブジェクトをResources1.resourcesファイル名を使用しています。The first instantiates a ResourceReader object that represents a .resources file named Resources1.resources by using its file name. 2 番目のインスタンスを作成、ResourceReaderという名前の .resources ファイルを表すオブジェクトをResources2.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)      

作成する、 ResourceReader 、埋め込みの .resources ファイルを表すオブジェクトをインスタンス化、 Assembly .resources ファイルが埋め込まれているアセンブリからのオブジェクト。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. そのAssembly.GetManifestResourceStreamメソッドを返します。 をStreamオブジェクトを渡すことができる、ResourceReader(Stream)コンス トラクター。Its 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メソッドを 1 つのリソースから、[次へ] に移動します。You call the IDictionaryEnumerator.MoveNext method to move from one resource to the next. メソッドを返しますfalse.resources ファイル内のすべてのリソースが列挙されたとき。The method returns false when all the resources in the .resources file have been enumerated.

注意

ですが、ResourceReaderクラスが実装する、IEnumerableインターフェイスとIEnumerable.GetEnumeratorメソッド、ResourceReader.GetEnumeratorメソッドは提供しません、IEnumerable.GetEnumerator実装します。Although 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:

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.

次の例を使用して .resources ファイル内の各リソースの値と名前を取得する方法を示しています、IDictionaryEnumerator.KeyIDictionaryEnumerator.Valueプロパティ。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.txt という名前の次のテキスト ファイルを作成します。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 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:

  • AFormatException予期された形式でデータがない場合。A FormatException if the data is not in the expected format.

  • AFileNotFoundExceptionデータが所属する型を含むアセンブリが見つからない場合。A FileNotFoundException if the assembly that contains the type to which the data belongs cannot be found.

  • ATypeLoadExceptionで見つからない場合、データが所属する型にすることはできません。A TypeLoadException if the type to which the data belongs cannot be cannot be found.

型が定義されているアセンブリがアプリケーションに追加されていないか、または誤って削除されている場合に、.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 つのビットマップ、および 1 つのカスタムを含むバイナリ .resources ファイルをプログラムで作成しますDateTimeTZIオブジェクト。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. 含む Library.dll という名前のアセンブリを作成、DateTimeTZI構造体。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 をという名前の .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ブロック) または Library.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.

Extension Methods

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.

適用対象