ResourceReader 클래스

정의

순차 리소스 이름/값 쌍을 읽어 이진 리소스 파일(.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
상속
ResourceReader
특성
구현

설명

중요

신뢰할 수 없는 데이터로 이 클래스에서 메서드를 호출하는 것은 보안상 위험합니다.Calling methods from this class with untrusted data is a security risk. 신뢰할 수 있는 데이터로만 이 클래스에서 메서드를 호출하세요.Call the methods from this class only with trusted data. 자세한 내용은 데이터 유효성을 참조하세요.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. 합니다 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. 리소스 일반적으로 다음 이름을 지정할 수 있습니다 (같은 Section1, Section1Item1Section1Item2등) 사용 하 여 검색을 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. 직접 형식의 dispose 호출 해당 Dispose 의 메서드를 try / catch 블록입니다.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). ResourceReader 개체는 독립 실행형.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. 두 번째 인스턴스화하는 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 다음 리소스를 이동 하는 메서드.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.

두 가지 방법으로 컬렉션의 개별 리소스를 검색할 수 있습니다.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 속성에는 다음 예외를 throw 할 수 있습니다.The attempt to retrieve resource data from the IDictionaryEnumerator.Value property can throw the following exceptions:

.Resources 파일을 수정 된 경우 수동으로 형식이 정의 되어 있는 어셈블리는 애플리케이션과 함께 포함 되어 있지 않습니다 또는 실수로 삭제 된 경우 또는 이전에 실행 되는 이전 버전 어셈블리가 있는 경우 이러한 예외가 throw 되는 일반적으로 형식입니다.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. 이러한 예외 중 하나가 throw 되 면 각 리소스를 열거 하 고 호출 하 여 리소스를 검색할 수 있습니다는 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 파일의 리소스를 열거 하는 두 번째 방법은 작업도 호출 하 여 파일의 리소스를 탐색 합니다 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. 그러나 리소스를 검색 하려고 예외를 throw 하는 경우는 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.

다음 예제에서는 리소스를 검색 하 고 throw 된 예외를 처리 하도록이 접근 방식을 사용 하는 방법을 보여 줍니다.The following example illustrates how to use this approach to retrieve resources and to handle any exceptions that are thrown. 4 개의 문자열, 하나의 부울, 정수, 하나의 비트맵 및 하나는 사용자 지정을 포함 하는 이진.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 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ResourceReader class for the specified stream.

ResourceReader(String)

지정된 명명 리소스 파일에 대한 ResourceReader 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ResourceReader class for the specified named resource file.

메서드

Close()

ResourceReader 개체에 연결된 모든 운영 체제 리소스를 해제합니다.Releases all operating system resources associated with this ResourceReader object.

Dispose()

ResourceReader 클래스의 현재 인스턴스에서 사용하는 모든 리소스를 해제합니다.Releases all resources used by the current instance of the ResourceReader class.

Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetEnumerator()

ResourceReader 개체에 대한 열거자를 반환합니다.Returns an enumerator for this ResourceReader object.

GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetResourceData(String, String, Byte[])

열린 리소스 파일이나 스트림에서 명명된 리소스의 데이터와 형식 이름을 검색합니다.Retrieves the type name and data of a named resource from an open resource file or stream.

GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)

명시적 인터페이스 구현

IDisposable.Dispose()

ResourceReader에서 사용하는 리소스를 해제합니다.Releases the resources used by the ResourceReader.

IEnumerable.GetEnumerator()

ResourceReader 개체에 대한 열거자를 반환합니다.Returns an enumerator for this ResourceReader object.

확장 메서드

Cast<TResult>(IEnumerable)

IEnumerable의 요소를 지정된 형식으로 캐스팅합니다.Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable)

지정된 형식에 따라 IEnumerable의 요소를 필터링합니다.Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable)

쿼리를 병렬화할 수 있도록 합니다.Enables parallelization of a query.

AsQueryable(IEnumerable)

IEnumerableIQueryable로 변환합니다.Converts an IEnumerable to an IQueryable.

적용 대상