ResourceReader ResourceReader ResourceReader ResourceReader Class

Definition

Listet die Ressourcen in einer binären Ressourcendatei (.resources) durch Lesen von sequenziellen Ressourcenname-/Wert-Paaren auf.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
Vererbung
ResourceReaderResourceReaderResourceReaderResourceReader
Attribute
Implementiert

Hinweise

Wichtig

Das Aufrufen von Methoden aus dieser Klasse mit nicht vertrauenswürdigen Daten stellt ein Sicherheitsrisiko dar.Calling methods from this class with untrusted data is a security risk. Rufen Sie die Methoden aus dieser Klasse nur mit vertrauenswürdigen Daten auf.Call the methods from this class only with trusted data. Weitere Informationen finden Sie unter Data Validation (Datenüberprüfung).For more information, see Data Validation.

Die ResourceReader -Klasse stellt eine Standard Implementierung IResourceReader der-Schnittstelle bereit.The ResourceReader class provides a standard implementation of the IResourceReader interface. Eine ResourceReader -Instanz stellt entweder eine eigenständige resources-Datei oder eine resources-Datei dar, die in eine Assembly eingebettet ist.A ResourceReader instance represents either a standalone .resources file or a .resources file that is embedded in an assembly. Sie wird verwendet, um die Ressourcen in einer resources-Datei aufzulisten und die Name-Wert-Paare abzurufen.It is used to enumerate the resources in a .resources file and retrieve its name/value pairs. Sie unterscheidet sich ResourceManager von der-Klasse, mit der angegebene benannte Ressourcen aus einer resources-Datei abgerufen werden, die in eine Assembly eingebettet ist.It differs from the ResourceManager class, which is used to retrieve specified named resources from a .resources file that is embedded in an assembly. Die ResourceManager -Klasse wird zum Abrufen von Ressourcen verwendet, deren Namen im Voraus bekannt sind ResourceReader , während die-Klasse zum Abrufen von Ressourcen nützlich ist, deren Anzahl oder genaue Namen zum Zeitpunkt der Kompilierung nicht bekannt sind.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. Beispielsweise kann eine Anwendung eine Ressourcen Datei verwenden, um Konfigurationsinformationen zu speichern, die in Abschnitten und Elementen in einem Abschnitt organisiert sind, wobei die Anzahl der Abschnitte oder Elemente in einem Abschnitt nicht im Voraus bekannt ist.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. Ressourcen können Section1dann generisch benannt werden (z. b., Section1Item1, Section1Item2usw.) und mithilfe eines ResourceReader -Objekts abgerufen werden.Resources can then be named generically (such as Section1, Section1Item1, Section1Item2, and so on) and retrieved by using a ResourceReader object.

Wichtig

Dieser Typ implementiert die IDisposable-Schnittstelle.This type implements the IDisposable interface. Nach Abschluss der Verwendung sollten Sie den Typ entweder direkt oder indirekt löschen.When you have finished using the type, you should dispose of it either directly or indirectly. Zum direkten Löschen des Typs rufen Sie seine Dispose-Methode in einem try/catch-Block auf.To dispose of the type directly, call its Dispose method in a try/catch block. Zum indirekten Löschen verwenden Sie ein Sprachkonstrukt wie using (in C#) oder Using (in Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Weitere Informationen finden Sie im Abschnitt „Verwenden eines Objekts, das IDisposable implementiert“ des Themas „Die IDisposable-Schnittstelle“.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

Weitere Informationen zum Verwenden der ResourceReader -Klasse finden Sie in den folgenden Abschnitten:For more information about using the ResourceReader class, see the following sections:

Instanziieren eines ResourceReader-ObjektsInstantiating a ResourceReader Object

Bei einer resources-Datei handelt es sich um eine Binärdatei, die von Resgen. exe (Resource File Generator)entweder aus einer Textdatei oder aus einer XML. resx-Datei kompiliert wurde.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). Ein ResourceReader -Objekt kann entweder eine eigenständige resources-Datei oder eine resources-Datei darstellen, die in eine Assembly eingebettet wurde.A ResourceReader object can represent either a standalone .resources file or a .resources file that has been embedded in an assembly.

Um ein ResourceReader -Objekt zu instanziieren, das aus einer eigenständigen resources-Datei ResourceReader liest, verwenden Sie den-Klassenkonstruktor mit einem Eingabedaten Strom oder einer Zeichenfolge, die den. Resources-Dateinamen enthält.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. Im folgenden Beispiel werden beide Ansätze veranschaulicht.The following example illustrates both approaches. Der erste instanziiert ein ResourceReader -Objekt, das eine resources-Datei Resources1.resources mit dem Namen unter Verwendung des Datei namens darstellt.The first instantiates a ResourceReader object that represents a .resources file named Resources1.resources by using its file name. Die zweite instanziiert ein ResourceReader -Objekt, das eine resources-Datei Resources2.resources mit dem Namen darstellt, indem ein aus der Datei erstellter Stream verwendet wird.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)      

Zum Erstellen eines ResourceReader -Objekts, das eine eingebettete resources-Datei darstellt, instanziieren Sie ein Assembly -Objekt aus der Assembly, in die die resources-Datei eingebettet ist.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. Die- Stream Methode gibt ein-Objekt zurück, das an ResourceReader(Stream) den-Konstruktor übergeben werden kann. Assembly.GetManifestResourceStreamIts Assembly.GetManifestResourceStream method returns a Stream object that can be passed to the ResourceReader(Stream) constructor. Im folgenden Beispiel wird ein ResourceReader -Objekt instanziiert, das eine eingebettete resources-Datei darstellt.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) 

Auflisten der Ressourcen eines ResourceReader-ObjektsEnumerating a ResourceReader Object's Resources

Um die Ressourcen in einer resources-Datei aufzulisten, wird die GetEnumerator -Methode aufgerufen, die ein System.Collections.IDictionaryEnumerator -Objekt zurückgibt.To enumerate the resources in a .resources file, you call the GetEnumerator method, which returns an System.Collections.IDictionaryEnumerator object. Die IDictionaryEnumerator.MoveNext -Methode wird aufgerufen, um von einer Ressource zum nächsten zu wechseln.You call the IDictionaryEnumerator.MoveNext method to move from one resource to the next. Die-Methode false gibt zurück, wenn alle Ressourcen in der resources-Datei aufgezählt wurden.The method returns false when all the resources in the .resources file have been enumerated.

Hinweis

Obwohl die ResourceReader -Klasse die IEnumerable -Schnittstelle IEnumerable.GetEnumerator und die- ResourceReader.GetEnumerator Methode implementiert, stellt die IEnumerable.GetEnumerator -Methode die-Implementierung nicht bereit.Although the ResourceReader class implements the IEnumerable interface and the IEnumerable.GetEnumerator method, the ResourceReader.GetEnumerator method does not provide the IEnumerable.GetEnumerator implementation. Stattdessen gibt die ResourceReader.GetEnumerator Methode ein IDictionaryEnumerator Schnittstellen Objekt zurück, das Zugriff auf das Name-Wert-Paar der einzelnen Ressourcen bietet.Instead, the ResourceReader.GetEnumerator method returns an IDictionaryEnumerator interface object that provides access to each resource's name/value pair.

Die einzelnen Ressourcen in der Sammlung können auf zwei Arten abgerufen werden:You can retrieve the individual resources in the collection in two ways:

Abrufen von Ressourcen mithilfe von iatortionaryenumerator-EigenschaftenRetrieving Resources by Using IDictionaryEnumerator Properties

Die erste Methode zum Auflisten der Ressourcen in einer resources-Datei umfasst das direkte Abrufen des Name-Wert-Paars der einzelnen Ressourcen.The first method of enumerating the resources in a .resources file involves directly retrieving each resource's name/value pair. Nachdem Sie die IDictionaryEnumerator.MoveNext -Methode aufgerufen haben, um zu jeder Ressource in der Auflistung zu wechseln, können Sie den Ressourcen IDictionaryEnumerator.Key Namen aus der-Eigenschaft und den IDictionaryEnumerator.Value Ressourcen Daten aus der-Eigenschaft abrufen.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.

Im folgenden Beispiel wird gezeigt, wie der Name und der Wert der einzelnen Ressourcen in einer resources-Datei mithilfe der IDictionaryEnumerator.Key - IDictionaryEnumerator.Value Eigenschaft und der-Eigenschaft abgerufen werden.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. Um das Beispiel auszuführen, erstellen Sie die folgende Textdatei mit dem Namen "applicationresources. txt", um Zeichen folgen Ressourcen zu definieren.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:"  

Anschließend können Sie die Textressourcen Datei mithilfe des folgenden Befehls in eine Binärdatei mit dem Namen applicationresources. Resources konvertieren: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

Im folgenden Beispiel wird die ResourceReader -Klasse verwendet, um jede Ressource in der eigenständigen Binary. resources-Datei aufzulisten und den Schlüsselnamen und den entsprechenden Wert anzuzeigen.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)

Der Versuch, Ressourcen Daten aus der IDictionaryEnumerator.Value -Eigenschaft abzurufen, kann die folgenden Ausnahmen auslösen:The attempt to retrieve resource data from the IDictionaryEnumerator.Value property can throw the following exceptions:

  • Ein FormatException , wenn die Daten nicht im erwarteten Format vorliegen.A FormatException if the data is not in the expected format.

  • Ein FileNotFoundException , wenn die Assembly, die den Typ enthält, zu dem die Daten gehören, nicht gefunden werden kann.A FileNotFoundException if the assembly that contains the type to which the data belongs cannot be found.

  • Ein TypeLoadException , wenn der Typ, zu dem die Daten gehören, nicht gefunden werden kann.A TypeLoadException if the type to which the data belongs cannot be cannot be found.

Normalerweise werden diese Ausnahmen ausgelöst, wenn die resources-Datei manuell geändert wurde, wenn die Assembly, in der ein Typ definiert ist, entweder nicht in einer Anwendung enthalten ist oder versehentlich gelöscht wurde, oder wenn die Assembly eine ältere Version ist, die vor dem Datum liegt. ein-Typ.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. Wenn eine dieser Ausnahmen ausgelöst wird, können Sie Ressourcen abrufen, indem Sie die einzelnen Ressourcen aufzählen und die GetResourceData -Methode aufrufen, wie im folgenden Abschnitt gezeigt.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. Diese Vorgehensweise bietet Ihnen einige Informationen über den Datentyp, der IDictionaryEnumerator.Value von der-Eigenschaft zurückgegeben wurde.This approach provides you with some information about the data type that the IDictionaryEnumerator.Value property attempted to return.

Abrufen von Ressourcen nach Namen mit getresourcedataRetrieving Resources by Name with GetResourceData

Der zweite Ansatz zum Auflisten von Ressourcen in einer resources-Datei umfasst auch das Navigieren durch die Ressourcen in der Datei durch Aufrufen der IDictionaryEnumerator.MoveNext -Methode.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. Für jede Ressource rufen Sie den Namen der Ressource aus der IDictionaryEnumerator.Key -Eigenschaft ab, die dann an die GetResourceData(String, String, Byte[]) -Methode weitergegeben wird, um die Daten der Ressource abzurufen.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. Dies wird als Bytearray im resourceData -Argument zurückgegeben.This is returned as a byte array in the resourceData argument.

Diese Vorgehensweise ist schwieriger als das Abrufen des Ressourcen namens und-Werts aus IDictionaryEnumerator.Key der IDictionaryEnumerator.Value -Eigenschaft und der-Eigenschaft, da die tatsächlichen Bytes zurückgegeben werden, die den Ressourcen Wert bilden.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. Wenn der Versuch zum Abrufen der Ressource jedoch eine Ausnahme auslöst, kann die GetResourceData -Methode helfen, die Quelle der Ausnahme zu identifizieren, indem Informationen über den Datentyp der Ressource bereitgestellt werden.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. Weitere Informationen über die Zeichenfolge, die den Datentyp der Ressource angibt, GetResourceDatafinden Sie unter.For more information about the string that indicates the resource's data type, see GetResourceData.

Im folgenden Beispiel wird veranschaulicht, wie diese Methode zum Abrufen von Ressourcen und zum behandeln ausgelösten Ausnahmen verwendet wird.The following example illustrates how to use this approach to retrieve resources and to handle any exceptions that are thrown. Er erstellt Programm gesteuert eine binäre RESOURCES-Datei, die vier Zeichen folgen enthält: einen booleschen Wert, eine ganze Zahl, eine Bitmap DateTimeTZI und ein benutzerdefiniertes Objekt.It programmatically creates a binary .resources file that contains four strings, one Boolean, one integer, one bitmap, and one custom DateTimeTZI object. Gehen Sie folgendermaßen vor, um das Beispiel auszuführen:To run the example, do the following:

  1. Erstellen Sie eine Assembly mit dem Namen Library. dll DateTimeTZI , die die Struktur enthält.Create an assembly named Library.dll that contains the DateTimeTZI structure. Im folgenden finden Sie den Quellcode für die Assembly.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
    

    Kompilieren Sie den Quellcode in C# mit dem folgenden Befehl:Compile the source code in C# by using the following command:

    csc /t:library library.cs  
    

    Oder Sie können Sie in Visual Basic kompilieren, indem Sie den folgenden Befehl verwenden:Or, you can compile it in Visual Basic by using the following command:

    vbc library.vb /t:library  
    
  2. Kompilieren Sie den folgenden Quellcode, und führen Sie ihn aus, der eine resources-Datei mit dem Namen contactresources. resources erstellt.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
    

    Der Name der Quell Code Datei lautet CreateResources.cs.The source code file is named CreateResources.cs. Sie können ihn mit dem C# folgenden Befehl in kompilieren:You can compile it in C# by using the following command:

    csc CreateResources.cs /r:library.dll  
    

    Oder Sie können Sie in Visual Basic kompilieren, indem Sie den folgenden Befehl verwenden:Or, you can compile it in Visual Basic by using the following command:

    vbc CreateResources.vb /r:library.dll  
    
  3. Kompilieren Sie den folgenden Code, und führen Sie ihn aus, um die Ressourcen in der Datei contactresources. Resources aufzuzählen.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
    

    Nachdem Sie den Quellcode geändert haben (z. b. durch das FormatException absichtliche Auslösen eines am try Ende des Blocks) oder indem Sie die Assembly. dll-Assembly so umbenennen, dass Sie zur Laufzeit nicht verfügbar ist, können Sie GetResourceData das Beispiel ausführen, um zu sehen, wie Aufrufe von Hiermit können Sie Ressourcen Informationen abrufen oder neu erstellen.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.

Konstruktoren

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

Initialisiert eine neue Instanz der ResourceReader-Klasse für den angegebenen Stream.Initializes a new instance of the ResourceReader class for the specified stream.

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

Initialisiert eine neue Instanz der ResourceReader-Klasse für die angegebene benannten Ressourcendatei.Initializes a new instance of the ResourceReader class for the specified named resource file.

Methoden

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

Gibt alle diesem ResourceReader-Objekt zugeordneten Ressourcen des Betriebssystems frei.Releases all operating system resources associated with this ResourceReader object.

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

Gibt alle von der aktuellen Instanz der ResourceReader-Klasse verwendeten Ressourcen frei.Releases all resources used by the current instance of the ResourceReader class.

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

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

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

Gibt ein Enumerator für dieses ResourceReader-Objekt zurück.Returns an enumerator for this ResourceReader object.

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

Fungiert als Standardhashfunktion.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[])

Ruft den Typnamen und die Daten einer benannten Ressource aus einer geöffneten Ressourcendatei oder einem geöffneten Stream ab.Retrieves the type name and data of a named resource from an open resource file or stream.

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

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

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

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

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

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Inherited from Object)

Explizite Schnittstellenimplementierungen

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

Gibt die von der ResourceReader verwendeten Ressourcen frei.Releases the resources used by the ResourceReader.

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

Gibt ein Enumerator für dieses ResourceReader-Objekt zurück.Returns an enumerator for this ResourceReader object.

Erweiterungsmethoden

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

Wandelt die Elemente eines IEnumerable in den angegebenen Typ umCasts the elements of an IEnumerable to the specified type.

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

Filtert die Elemente eines IEnumerable anhand eines angegebenen TypsFilters the elements of an IEnumerable based on a specified type.

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

Ermöglicht die Parallelisierung einer Abfrage.Enables parallelization of a query.

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

Konvertiert einen IEnumerable in einen IQueryable.Converts an IEnumerable to an IQueryable.

Gilt für: