Textdatei in Form1.resx einlesen



  • Wie kann ich eine Resourcen-Textdatei einlesen? Also ich habe die Textdatei Xy in der Recourcendatei Form1.resx. Wie ich Textdateien einlese, die sich auf einem normalen Datenträger befinden, ist mir bekannt. Doch wie erstelle ich einen Zeiger auf die Resource?



  • Hat wirklich keiner eine Idee, wie man die Ressourcendatei einlesen kann?

    Ich will halt, dass nur das Programm die Datei verändern kann.



  • Mit der "ResoruceManager"-Klasse ?



  • Das funktioniert nicht:

    System::Resources::ResourceManager ^rm = gcnew System::Resources::ResourceManager("MeinProjektname.Form1", System::Reflection::Assembly::GetEntryAssembly());
    			     String^ Dateiname = rm->GetString("Datei");
    

    Dann hab' ich diese Funktion, die die Datei einlesen soll:

    private: void LoadText(String^ datei)
    		 {
    			 try
    			 {
    				 String^ Lesen;
    				 StreamReader^ Datei =
    					 gcnew StreamReader(datei);
    				 while (Lesen = Datei->ReadToEnd())
    				 {
    					 text = Zeile;
    				 }
    			 }
    			 catch(...)
    			 {
    				 MessageBox::Show
    					 ("Datei beschädigt");
    				 this->Activate();
    			 this->ActiveForm;
    			 this->Activate();
    			 }
    		 }
    

    Mir wird jetzt aber immer angezeigt: Datei beschädigt.

    Ich find' den Fehler einfach nicht. 😞

    MfG
    Mistkäfer



  • Poste doch mal den wichtigen Teil Deiner resx-Datei...



  • Wie soll ich den Teil posten? Da is halt ne Textdatei namens Datei drin.



  • Und wie heissen die Tags drum rum? Schau Dir mal die Datei in einem Texteditor an (Rechtsklick auf die resx-Datei in VS und "View Code")!

    Und mit

    rm->GetString("Datei");
    

    solltest Du die Datei rausbekommen! WAS geht da nicht?



  • Das ist der Code meiner Form1.resx-Datei:

    <?xml version="1.0" encoding="utf-8"?>
    <root>
      <!-- 
        Microsoft ResX Schema 
    
        Version 2.0
    
        The primary goals of this format is to allow a simple XML format 
        that is mostly human readable. The generation and parsing of the 
        various data types are done through the TypeConverter classes 
        associated with the data types.
    
        Example:
    
        ... ado.net/XML headers & schema ...
        <resheader name="resmimetype">text/microsoft-resx</resheader>
        <resheader name="version">2.0</resheader>
        <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
        <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
        <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
        <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
        <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
            <value>[base64 mime encoded serialized .NET Framework object]</value>
        </data>
        <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
            <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
            <comment>This is a comment</comment>
        </data>
    
        There are any number of "resheader" rows that contain simple 
        name/value pairs.
    
        Each data row contains a name, and value. The row also contains a 
        type or mimetype. Type corresponds to a .NET class that support 
        text/value conversion through the TypeConverter architecture. 
        Classes that don't support this are serialized and stored with the 
        mimetype set.
    
        The mimetype is used for serialized objects, and tells the 
        ResXResourceReader how to depersist the object. This is currently not 
        extensible. For a given mimetype the value must be set accordingly:
    
        Note - application/x-microsoft.net.object.binary.base64 is the format 
        that the ResXResourceWriter will generate, however the reader can 
        read any of the formats listed below.
    
        mimetype: application/x-microsoft.net.object.binary.base64
        value   : The object must be serialized with 
                : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
                : and then encoded with base64 encoding.
    
        mimetype: application/x-microsoft.net.object.soap.base64
        value   : The object must be serialized with 
                : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
                : and then encoded with base64 encoding.
    
        mimetype: application/x-microsoft.net.object.bytearray.base64
        value   : The object must be serialized into a byte array 
                : using a System.ComponentModel.TypeConverter
                : and then encoded with base64 encoding.
        -->
      <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
        <xsd:element name="root" msdata:IsDataSet="true">
          <xsd:complexType>
            <xsd:choice maxOccurs="unbounded">
              <xsd:element name="metadata">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" />
                  </xsd:sequence>
                  <xsd:attribute name="name" use="required" type="xsd:string" />
                  <xsd:attribute name="type" type="xsd:string" />
                  <xsd:attribute name="mimetype" type="xsd:string" />
                  <xsd:attribute ref="xml:space" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="assembly">
                <xsd:complexType>
                  <xsd:attribute name="alias" type="xsd:string" />
                  <xsd:attribute name="name" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="data">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                    <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
                  </xsd:sequence>
                  <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
                  <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
                  <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
                  <xsd:attribute ref="xml:space" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="resheader">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                  </xsd:sequence>
                  <xsd:attribute name="name" type="xsd:string" use="required" />
                </xsd:complexType>
              </xsd:element>
            </xsd:choice>
          </xsd:complexType>
        </xsd:element>
      </xsd:schema>
      <resheader name="resmimetype">
        <value>text/microsoft-resx</value>
      </resheader>
      <resheader name="version">
        <value>2.0</value>
      </resheader>
      <resheader name="reader">
        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
      </resheader>
      <resheader name="writer">
        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
      </resheader>
      <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <data name="Datei" type="System.Resources.ResXFileRef, System.Windows.Forms">
        <value>..\..\..\..\..\..\..\Test.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
      </data>
    </root>
    

    Bitteschön...



  • Und WAS geht jetzt nicht?



  • Wenn ich den Text versuche einzulesen, kommt eine Fehlermeldung. Die Fehlermeldung in der try/catch Methode, die ich eingebaut habe.



  • und die währe?, wenn sie aus einer Try Catch konstruktion kommt ist doch warscheinlich schon klar was los ist (Wenn du den richtigen Exception handler eingebaut hast)...


Anmelden zum Antworten