ResourceReader Třída

Definice

Vypíše prostředky v binárním souboru prostředků (. Resources) čtením dvojice název/hodnota pořadí prostředků.Enumerates the resources in a binary resources (.resources) file by reading sequential resource name/value pairs.

public ref class ResourceReader sealed : System::Resources::IResourceReader
public ref class ResourceReader sealed : IDisposable
public ref class ResourceReader sealed : IDisposable, System::Collections::IEnumerable, System::Resources::IResourceReader
public sealed class ResourceReader : System.Resources.IResourceReader
public sealed class ResourceReader : IDisposable
public sealed class ResourceReader : IDisposable, System.Collections.IEnumerable, System.Resources.IResourceReader
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ResourceReader : System.Resources.IResourceReader
type ResourceReader = class
    interface IEnumerable
    interface IDisposable
    interface IResourceReader
type ResourceReader = class
    interface IDisposable
type ResourceReader = class
    interface IResourceReader
    interface IEnumerable
    interface IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type ResourceReader = class
    interface IResourceReader
    interface IEnumerable
    interface IDisposable
Public NotInheritable Class ResourceReader
Implements IResourceReader
Public NotInheritable Class ResourceReader
Implements IDisposable
Public NotInheritable Class ResourceReader
Implements IDisposable, IEnumerable, IResourceReader
Dědičnost
ResourceReader
Atributy
Implementuje

Poznámky

Důležité

Volání metod z této třídy s nedůvěryhodnými daty je bezpečnostní riziko.Calling methods from this class with untrusted data is a security risk. Volejte metody z této třídy pouze s důvěryhodnými daty.Call the methods from this class only with trusted data. Další informace najdete v tématu ověření dat.For more information, see Data Validation.

ResourceReaderTřída poskytuje standardní implementaci IResourceReader rozhraní.The ResourceReader class provides a standard implementation of the IResourceReader interface. ResourceReaderInstance představuje samostatný soubor. Resources nebo soubor. Resources, který je vložen do sestavení.A ResourceReader instance represents either a standalone .resources file or a .resources file that is embedded in an assembly. Slouží k zobrazení výčtu prostředků v souboru. Resources a načtení párů název/hodnota.It is used to enumerate the resources in a .resources file and retrieve its name/value pairs. Liší se od ResourceManager třídy, která se používá k načtení zadaných pojmenovaných prostředků ze souboru. Resources, který je vložen do sestavení.It differs from the ResourceManager class, which is used to retrieve specified named resources from a .resources file that is embedded in an assembly. ResourceManagerTřída se používá k načtení prostředků, jejichž názvy jsou známy předem, zatímco ResourceReader Třída je užitečná pro načítání prostředků, jejichž počet nebo přesné názvy nejsou známy v době kompilace.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. Aplikace může například použít soubor prostředků k uložení informací o konfiguraci, které jsou uspořádány do sekcí a položek v sekci, kde počet oddílů nebo položek v oddílu není předem znám.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. Prostředky je pak možné pojmenovat obecně (například Section1 ,, Section1Item1 Section1Item2 a tak dále) a načíst je pomocí ResourceReader objektu.Resources can then be named generically (such as Section1, Section1Item1, Section1Item2, and so on) and retrieved by using a ResourceReader object.

Důležité

Tento typ implementuje IDisposable rozhraní.This type implements the IDisposable interface. Po dokončení používání typu byste ho měli nakládat buď přímo, nebo nepřímo.When you have finished using the type, you should dispose of it either directly or indirectly. Chcete-li přímo uvolnit typ, zavolejte jeho Dispose metodu v try / catch bloku.To dispose of the type directly, call its Dispose method in a try/catch block. Chcete-li ji nakládat nepřímo, použijte konstrukci jazyka, například using (v jazyce C#) nebo Using (v Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Další informace naleznete v části "použití objektu, který implementuje IDisposable" v IDisposable tématu rozhraní.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

Další informace o použití ResourceReader třídy naleznete v následujících částech:For more information about using the ResourceReader class, see the following sections:

Vytvoření instance objektu ResourceReaderInstantiating a ResourceReader Object

Soubor. Resources je binární soubor, který byl zkompilován z textového souboru nebo souboru XML. resx pomocí Resgen.exe (generátor zdrojového souboru).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). ResourceReaderObjekt může představovat buď samostatný soubor. Resources, nebo soubor. Resources, který byl vložen do sestavení.A ResourceReader object can represent either a standalone .resources file or a .resources file that has been embedded in an assembly.

Chcete-li vytvořit instanci ResourceReader objektu, který čte ze samostatného souboru. Resources, použijte ResourceReader konstruktor třídy se vstupním datovým proudem nebo řetězcem, který obsahuje název souboru. 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. Následující příklad ukazuje oba přístupy.The following example illustrates both approaches. První vytvoří instanci ResourceReader objektu, který představuje soubor. resources pojmenovaný Resources1.resources pomocí jeho názvu souboru.The first instantiates a ResourceReader object that represents a .resources file named Resources1.resources by using its file name. Druhý vytvoří instanci ResourceReader objektu, který představuje soubor. Resources s názvem Resources2.resources pomocí datového proudu vytvořeného ze souboru.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)      

Chcete-li vytvořit ResourceReader objekt, který představuje vložený soubor. Resources, vytvořte instanci Assembly objektu ze sestavení, ve kterém je soubor. Resources vložen.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. Jeho Assembly.GetManifestResourceStream Metoda vrátí Stream objekt, který lze předat ResourceReader(Stream) konstruktoru.Its Assembly.GetManifestResourceStream method returns a Stream object that can be passed to the ResourceReader(Stream) constructor. Následující příklad vytvoří instanci ResourceReader objektu, který představuje vložený soubor. 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) 

Výčet prostředků objektu ResourceReaderEnumerating a ResourceReader Object's Resources

Chcete-li vytvořit výčet prostředků v souboru. Resources, zavolejte GetEnumerator metodu, která vrátí System.Collections.IDictionaryEnumerator objekt.To enumerate the resources in a .resources file, you call the GetEnumerator method, which returns an System.Collections.IDictionaryEnumerator object. Zavoláte metodu, která se má IDictionaryEnumerator.MoveNext přesunout z jednoho prostředku do dalšího.You call the IDictionaryEnumerator.MoveNext method to move from one resource to the next. Metoda vrátí false všechny prostředky v souboru. Resources, které byly vyčísleny.The method returns false when all the resources in the .resources file have been enumerated.

Poznámka

I když ResourceReader Třída implementuje IEnumerable rozhraní a IEnumerable.GetEnumerator metodu, ResourceReader.GetEnumerator Metoda neposkytuje IEnumerable.GetEnumerator implementaci.Although the ResourceReader class implements the IEnumerable interface and the IEnumerable.GetEnumerator method, the ResourceReader.GetEnumerator method does not provide the IEnumerable.GetEnumerator implementation. Místo toho ResourceReader.GetEnumerator Metoda vrátí IDictionaryEnumerator objekt rozhraní, který poskytuje přístup ke dvojici název/hodnota každého prostředku.Instead, the ResourceReader.GetEnumerator method returns an IDictionaryEnumerator interface object that provides access to each resource's name/value pair.

Jednotlivé prostředky v kolekci můžete načíst dvěma způsoby:You can retrieve the individual resources in the collection in two ways:

Načítání prostředků podle vlastností IDictionaryEnumeratorRetrieving Resources by Using IDictionaryEnumerator Properties

První metodou vytváření výčtu prostředků v souboru. Resources je načítají přímo dvojice název/hodnota každého prostředku.The first method of enumerating the resources in a .resources file involves directly retrieving each resource's name/value pair. Po volání IDictionaryEnumerator.MoveNext metody pro přesun do jednotlivých prostředků v kolekci můžete načíst název prostředku z IDictionaryEnumerator.Key vlastnosti a data prostředků z IDictionaryEnumerator.Value Vlastnosti.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.

Následující příklad ukazuje, jak načíst název a hodnotu každého prostředku v souboru. Resources pomocí IDictionaryEnumerator.Key IDictionaryEnumerator.Value vlastností a.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. Chcete-li spustit příklad, vytvořte následující textový soubor s názvem ApplicationResources.txt k definování řetězcových prostředků.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:"  

Pak můžete textový soubor prostředků převést do binárního souboru s názvem ApplicationResources. Resources pomocí následujícího příkazu:You can then convert the text resource file to a binary file named ApplicationResources.resources by using the following command:

ApplicationResources.txtResgenresgen ApplicationResources.txt

Následující příklad poté používá ResourceReader třídu k zobrazení výčtu každého prostředku v samostatném binárním souboru. Resources a k zobrazení jeho názvu klíče a odpovídající hodnoty.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)

Pokus o načtení dat prostředku z IDictionaryEnumerator.Value vlastnosti může vyvolat následující výjimky:The attempt to retrieve resource data from the IDictionaryEnumerator.Value property can throw the following exceptions:

Tyto výjimky jsou obvykle vyvolány, pokud byl soubor. Resources změněn ručně, pokud sestavení, ve kterém je definován typ, buď nebylo součástí aplikace, nebo bylo neúmyslně odstraněno, nebo pokud je sestavení starší verze, která je předchází typu.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. Pokud je vyvolána jedna z těchto výjimek, můžete načíst prostředky vytvořením výčtu každého prostředku a voláním GetResourceData metody, jak je uvedeno v následující části.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. Tento přístup vám poskytne některé informace o datovém typu, který se IDictionaryEnumerator.Value vlastnost pokusila vrátit.This approach provides you with some information about the data type that the IDictionaryEnumerator.Value property attempted to return.

Načítání prostředků podle názvu pomocí GetResourceDataRetrieving Resources by Name with GetResourceData

Druhý přístup k vytváření výčtu prostředků v souboru. Resources také zahrnuje procházení prostředků v souboru voláním IDictionaryEnumerator.MoveNext metody.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. Pro každý prostředek načtete název prostředku z IDictionaryEnumerator.Key vlastnosti, která je poté předána GetResourceData(String, String, Byte[]) metodě pro načtení dat prostředku.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. Toto je vráceno jako bajtové pole v resourceData argumentu.This is returned as a byte array in the resourceData argument.

Tento přístup je výhodnější než načítání názvu prostředku a hodnoty z IDictionaryEnumerator.Key IDictionaryEnumerator.Value vlastností a, protože vrací skutečné bajty, které tvoří hodnotu prostředku.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. Nicméně pokud pokus o načtení prostředku vyvolá výjimku, GetResourceData může metoda identifikovat zdroj výjimky poskytnutím informací o datovém typu prostředku.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. Další informace o řetězci, který označuje datový typ prostředku, naleznete v tématu GetResourceData .For more information about the string that indicates the resource's data type, see GetResourceData.

Následující příklad ukazuje, jak použít tento přístup k načtení prostředků a zpracování všech výjimek, které jsou vyvolány.The following example illustrates how to use this approach to retrieve resources and to handle any exceptions that are thrown. Programově vytvoří binární soubor. Resources, který obsahuje čtyři řetězce, jednu logickou hodnotu, jedno celé číslo, jeden rastrový obrázek a jeden vlastní DateTimeTZI objekt.It programmatically creates a binary .resources file that contains four strings, one Boolean, one integer, one bitmap, and one custom DateTimeTZI object. Chcete-li spustit příklad, udělejte toto:To run the example, do the following:

  1. Vytvořte sestavení s názvem Library.dll, které obsahuje DateTimeTZI strukturu.Create an assembly named Library.dll that contains the DateTimeTZI structure. Následuje zdrojový kód pro sestavení.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
    

    Zkompilujte zdrojový kód v jazyce C# pomocí následujícího příkazu:Compile the source code in C# by using the following command:

    csc /t:library library.cs  
    

    Nebo ho můžete zkompilovat v Visual Basic pomocí následujícího příkazu:Or, you can compile it in Visual Basic by using the following command:

    vbc library.vb /t:library  
    
  2. Zkompilujte a spusťte následující zdrojový kód, který vytvoří soubor. Resources s názvem 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
    

    Soubor zdrojového kódu má název CreateResources. cs.The source code file is named CreateResources.cs. Můžete ho zkompilovat v jazyce C# pomocí následujícího příkazu:You can compile it in C# by using the following command:

    csc CreateResources.cs /r:library.dll  
    

    Nebo ho můžete zkompilovat v Visual Basic pomocí následujícího příkazu:Or, you can compile it in Visual Basic by using the following command:

    vbc CreateResources.vb /r:library.dll  
    
  3. Zkompilujte a spusťte následující kód pro zobrazení výčtu prostředků v souboru 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
    

    Po úpravě zdrojového kódu (například na základě úmyslné rutiny na FormatException konci try bloku) nebo přejmenování sestavení Library.dll tak, že není k dispozici za běhu, můžete spustit příklad, který GetResourceData vám umožní načíst nebo znovu vytvořit některé informace o zdroji.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.

Konstruktory

ResourceReader(Stream)

Inicializuje novou instanci ResourceReader třídy pro zadaný datový proud.Initializes a new instance of the ResourceReader class for the specified stream.

ResourceReader(String)

Inicializuje novou instanci ResourceReader třídy pro zadaný pojmenovaný soubor prostředků.Initializes a new instance of the ResourceReader class for the specified named resource file.

Metody

Close()

Uvolní všechny prostředky operačního systému přidružené k tomuto ResourceReader objektu.Releases all operating system resources associated with this ResourceReader object.

Dispose()

Uvolní všechny prostředky používané aktuální instancí ResourceReader třídy.Releases all resources used by the current instance of the ResourceReader class.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.Determines whether the specified object is equal to the current object.

(Zděděno od Object)
GetEnumerator()

Vrátí enumerátor pro tento ResourceReader objekt.Returns an enumerator for this ResourceReader object.

GetHashCode()

Slouží jako výchozí funkce hash.Serves as the default hash function.

(Zděděno od Object)
GetResourceData(String, String, Byte[])

Načte název typu a data pojmenovaného prostředku z otevřeného souboru prostředků nebo datového proudu.Retrieves the type name and data of a named resource from an open resource file or stream.

GetType()

Získá Type aktuální instanci.Gets the Type of the current instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří kopii aktuálního seznamu Object .Creates a shallow copy of the current Object.

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.Returns a string that represents the current object.

(Zděděno od Object)

Explicitní implementace rozhraní

IDisposable.Dispose()

Uvolňuje prostředky používané v ResourceReader .Releases the resources used by the ResourceReader.

IEnumerable.GetEnumerator()

Vrátí enumerátor pro tento ResourceReader objekt.Returns an enumerator for this ResourceReader object.

Metody rozšíření

Cast<TResult>(IEnumerable)

Přetypování prvky IEnumerable na zadaný typ.Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable)

Filtruje prvky IEnumerable založené na zadaném typu.Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable)

Povoluje paralelní zpracování dotazu.Enables parallelization of a query.

AsQueryable(IEnumerable)

Převede IEnumerable na IQueryable .Converts an IEnumerable to an IQueryable.

Platí pro