Announcement

Collapse
No announcement yet.

Relativer Pfad zu meinen Resourcen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Relativer Pfad zu meinen Resourcen?

    Hi!
    Gibt es eine (elegante) Möglichkeit den Pfad meiner Klassen, oder zumindest einer bestimmten Klasse zu bekommen?
    Wie man den Pfad der Anwendung bekommt ist mir klar, dazu gibts auch genügend bei Google. Nur konnte ich nicht wirklich was finden, ob es möglich ist, den Pfad zu einer Klasse zu finden.
    Reichen würde es schon, wenn es für Resourcen eine Möglichkeit gibt.
    Ich hab eine Resourcen-Datei namens
    Code:
    Resources.resx
    .
    Kann ich den relativen Pfad dieser Datei auslesen?

    Grüße

  • #2
    Was haben Klassen mit Pfaden zu tun? Files != Klassen.

    Kann ich den relativen Pfad dieser Datei auslesen?
    Du weißt aber bereits den absoluten Pfad? Oder woher weißt du das die überhaupt existiert? Irgendwie komme ich mit deiner Frage nicht klar. Kannst du das mal verdeutlichen?

    Comment


    • #3
      Hallo,

      so wie deine Ressourcen-Datei heißt wird sie (standardmäßig) in die Assembly integriert (als Ressource eben ).

      Würde die Ressourcen-Datei "Ressource.de-AT.resx" heißen so wird im Ausgabeverzeichnis der Assembly ein Ordner "de-AT" erstellt indem diese kompilierte Ressource liegt.
      Somit wäre der relative Pfad ".\de-AT".


      mfG Gü
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #4
        Hi!
        Danke für eure Antworten.
        Files haben natürlich nichts mit Klassen zu tun, da habe ich mich wohl etwas unglücklich ausgedrückt.
        Ich wollte damit nur sagen, dass meine Ressource-Datei im gleichen Ordner liegt wie meine Klassen.

        @gfoidl
        Wenn ich die Ressource so aufrufe, wie von dir vorgeschlagen, so lande ich in diesem Pfad (Beispiel):
        "C:\Users\MeinName\Desktop\Program\Program\bin\Deb ug"
        Dort liegt aber nicht meine Ressource, also habe ich sie wohl nicht standardmäßig (/korrekt?) eingebunden?
        Meine Ressource befindet sich in ""C:\Users\MeinName\Desktop\Program\Program", dort wo sich auch meine restlichen Klassen befinden.

        Nun klar?
        Auf jeden Fall würde ich gerne wissen, wie ich diesen Pfad bekomme, bzw. ob ich ihn überhaupt bekommen kann?
        Ich verspreche mir halt davon, dass ich das Programm auch ohne Änderung auf einem anderen Rechner laufen lassen kann, da ich dann ja nun relative und keine absoluten Pfade hab.

        Gruß

        Comment


        • #5
          Hallo,

          ich versteh dein Problem ehrlich gesagt nicht. Die Klassen welche in Datein sind (soweit klar?) werden durch den Compiler zu einer Assembly übersetzt (soweit klar?). Diese Assembly beinhalten somit alle Klassen - oder anders: alle Dateien werden beim Kompilieren zu einer Datei, der Assembly, übersetzt - und diese eine Datei (die Assembly) kann auf andere Rechner gegeben werden. Auch die standardmäßigen Ressourcen werden in die Assembly gepackt. Nur lokalisierte Ressource (in der Antwort oben die xxx.de-AT.resx welche zu AssemblyName.de-AT.dll kompiliert wird) liegen im Unterverzeichnis mit dem Kulturkürzel das relativ zur Assembly liegt. Vom Benutzercode besteht nie der Bedarf auf diese lokalisierte Assembly zuzugreifen. Das ist Aufgabe der Runtime (~des Frameworks) und das funktioniert ganz gut

          Der Zugriff auf die Ressourcen vom Code ist ein Zugriff auf die Klasse und erfolgt so in der Art
          [highlight=c#]
          Properties.Resources.XXX
          [/highlight]
          (je nach Namespace anders).

          Warum willst du also die Ressourcen-Datei aufrufen? Das macht keinen Sinn. Es sei denn die zweckentfremdest die Ressourcen.

          Also wo die Datei liegt kann dir sowohl zur Entwicklungs- als auch zur Laufzeit wurscht sein. Das ist - wie oben bereits erwähnt - Aufgabe der Runtime.


          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            Originally posted by gfoidl View Post
            Warum willst du also die Ressourcen-Datei aufrufen? Das macht keinen Sinn. Es sei denn die zweckentfremdest die Ressourcen.
            Moin!
            Weil ich sie (zusätzlich) einlesen möchte.
            Code:
            ResXResourceReader resourceReader = new ResXResourceReader(@"C:\Pfad\Strings.resx");
            Grund: Ich verwende sie zur Lokalisierung (Mehrsprachigkeit).
            Da es bei mir jedoch notwendig ist, das zu übersetzende Wort und das übersetzte Wort nachvollziehen zu können und wieder zuordnen zu können, les ich die Ressourcen zu Beginn meiner Anwendung in ein Dictionary.

            Comment


            • #7
              Hallo,

              du willst also einen Ressourcen-Übersetzer schreiben. Wenn dem so sei warum schreibst du das nicht in die 1. Frage
              Dazu gibt es auch Lösungen wie zB den Zeta Resource Editor.

              Wie du an den relativen Pfad kommst habe ich bereits oben (mehrmals) erwähnt.


              kleines Detail am Rande:
              Lokalisierung (Mehrsprachigkeit)
              Globalisierung ist dass die Möglichkeit geschaffen wird Merhsprachigkeit zu unterstützung während Lokalsierung das Übersetzen der Ressourcen in die jeweilige (lokale) Sprache ist.


              mfG Gü
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment


              • #8
                Okay danke, klappt jetzt auch soweit.
                Ich hatte bei den Eigenschaften meiner Ressource bei "In Ausgabeverzeichnis kopieren", "nicht kopieren" ausgewählt, das war dann auch mein Fehler, weswegen das mit dem relativen Pfad bei mir nicht geklappt hat. Die Datei war dort nicht vorhanden. Jetzt kann ich, so wie von dir gezeigt, auf die Ressource zugreifen.

                Gruß & Dank

                Comment

                Working...
                X