Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.11.2013, 22:11

(C#) Interne Textdatei als String verwenden

Hi :)

Ich komm gleich zur Sache: Für mein aktuelles Projekt mache ich eine Windows-Form, die ein Hilfemenü darstellt. Das setze ich mit einigen Buttons zu verschiedenen Themen und einer großen Textbox um. Wird nun zB. auf den Knopf "Kontakt" geklickt, soll in der Textbox meine E-Mail und ein paar Informationen erscheinen. Da die Hilfetexte durchaus etwas länger sind und viele Absätze enthalten, möchte ich innerhalb der Projektmappe für jeden Hilfetext eine Textdatei anlegen, auf die dann zugegriffen wird. Die Textdatei für dieses Beispiel würde dann Hilfe_Kontakt.txt heißen.
Nun habe ich es folgendermaßen versucht:

C#-Quelltext

1
2
3
4
        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = Hilfe_Kontakt;
        }
Nun erhalte ich den Fehler, dass dieser Name im aktuellen Kontext nicht vorhanden ist. Ich habe ein bisschen herumprobiert, aber es bleibt dabei, die Datei wird einfach nicht gefunden und Zugriffsmodifizierer sind bei einer Textdatei auch keine zu finden. Wie kann ich also auf die Datei zugreifen und sie wie einen gewöhnlichen String verwenden?

Ich hoffe, ihr könnt mir helfen.

Liebe Grüße!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

3

04.11.2013, 22:17

Und falls du die Datei nicht bei dem Programm dabeilegen willst sondern sie in die exe packen willst (Properties -> Build Action -> Embedded Resource) brauchst du noch die Funktion Assembly.GetManifestResourceStream http://msdn.microsoft.com/de-de/library/…(v=vs.100).aspx

4

13.11.2013, 17:55

Ich schaffe es immer noch nicht. Auf die von euch genannten Methoden kann ich zugreifen, nicht aber auf die Textdatei selbst, hier bekomme ich noch immer die Meldung, dass der Name im aktuellen Kontext nicht vorhanden ist. Es handelt sich um eine normale Textdatei, die ich über "Neues Element" hinzugefügt habe, also innerhalb der Projektmappe.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

5

13.11.2013, 18:34

Wenn du die Datei bloß zur Projektmappe hinzufügst, wird sie leider nicht automatisch genutzt.
Falls du die Textdatei gerne als eine eingebette Resource nutzen möchtest, muss du erst auf "Eingebette Resource" bei der "Buildvorgang"-Einstellung der Datei umstellen. Alternativ kannst du mit der Einstellung "In das Ausgabeverzeichnis kopieren" die Dateien zur Executable kopieren. Dann kannst du die Daten so einlesen wie David vorgeschlagen hat. Für deinen Anwendungszweck wäre eine eingebettete Resource, glaube ich, sinnvoller. Musst aber du wissen, ob man die Datei nach dem Kompilieren noch ändern können sollte.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

13.11.2013, 18:38

Die Datei muss erst mal nicht in der Projektmappe sein. Möglich dass das irgendwie geht und möglicherweise auch was bringt, ist hier aber nicht sinnvoll. Du kannst sie als Ressource behandeln so wie Sylence vorgeschlagen hat, oder einfach als Datei dabei legen. Dann musst du aber auch den richtigen Pfad angeben. Wenn die Textdatei im selben Verzeichnis ist wie die Exe-Datei dann kannst du einfach den Datei nahmen benutzen. Ist sie in einem Unterordner, dann musst du halt den relativen PFad dazu angeben. Mal ein paar Beispiele:
Die Verzeichnisstruktur:
programm/program.exe
programm/file1.txt
programm/data/file2.txt
file3.txt

die Datei program.exe ist dein Programm. Willst du nun file1.txt einlesen wäre der Pfad: "file1.txt", willst du file2.txt einlesen wäre der Pfad "data/file2.txt" und willst du file3.txt einlesen wäre der Pfade "../file3.txt", da du mit ".." eine Ebene höher in der Ordnerstruktur gehst. Ansonsten sind das ganz normale relative Pfade.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

7

13.11.2013, 21:27

Direkt die Dateien zu den Binaries zu legen, halte ich für keine gute Idee. Normalerweise hat man mehrere Versionen mindestens für Release und Debug.
Wenn man die Dateien direkt in die Ordner legt muss man bei Änderungen manuell synchronsieren und Hand anlegen wenn eine neue Buildeinstellung erstellt wird oder man eine Versionsverwaltung nutzen will.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

13.11.2013, 22:39

Es gibt Dateien von welchen man verschiedene Versionen hat ja. Das ist aber nicht der normale Fall. Will ich nur einfach eine Datei mit Daten einlesen reicht es den Pfad anzugeben. Genau das macht deine Version mit "ins Ausgabeverzeichnis kopieren" ja auch. Wie gesagt es gibt sicherlich Konfigurationsdateien die unterschiedlich sein können, in den meisten Fällen wird das aber nicht der Fall sein. Und den Workflow bei welchem das wichtig wird wird kein Entwickler haben der solche Fragen stellt. Da denke ich ist dann erst mal eine einfache Variante gefragt.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

9

13.11.2013, 22:41

Da hast du mich irgendwie etwas falsch verstanden.
Mann sollte das so machen, weil alle die Dateien in der Regel für alle Konfigurationen gleich sind. Siehe meine genannten Punkte.

MK3E

Frischling

Beiträge: 48

Beruf: Schüler

  • Private Nachricht senden

10

14.11.2013, 13:04

C#-Quelltext

1
2
3
4
       private void button2_Click(object sender, EventArgs e)
        {
           this.Textbox1.text = Projektname.Properties.Resources.Textdokument;
        }


Dazu musst du nur Dein Textdokument zu den Ressurcen Hinzufügen
Coder aus Leidenschaft

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MK3E« (14.11.2013, 13:49)


Werbeanzeige