Laden...

externe Datei

Erstellt von kiwi_girl vor 18 Jahren Letzter Beitrag vor 18 Jahren 5.334 Views
kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren
externe Datei

Hallo zusammen

ich bin recht neu mit der programmiersprache C# und auch im allgemeinen mit programmiersprachen.

ich möchte gerne wisse, wie man eine eingabe extern in eine datei abspeichern kann, so das ich beim nächsten start diese eingabe(n) abrufen kann. ich habe keine ahnung wie.

danke im voraus!
grüessli

PS: wenn diese frage schon im forum ist, könnte ich bitte den link bekommen, denn ich habe bei meiner suche nichts gefunden.

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

M
329 Beiträge seit 2004
vor 18 Jahren

Ja es gibt verschiedene möglichkeiten, hängt auch vom objekt ab, das du abspeichern möchtest.*Wenn du nur text abspeichern möchtest empfehle ich dir ein normales textfile (Namensraum System.IO) *Wenn du ein Objekt abspeichern möchtest kannst du es Serialisieren (Forensuche oder Google) *oder du kannst natürlich auch alles in ein xml-file abspeichern.

LG

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

ok danke.

ich speichere einen text und so spricht mir punkt 1 und 3 zu.

hättest du mir villeicht auch code? im visual studio index fand ich schon das gesuchte, ist mir aber nicht so verständlich..

grüessli

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

D
280 Beiträge seit 2005
vor 18 Jahren

Hi kiwi_girl

zum schreiben in eine Datei:


StreamWriter sw = new StreamWriter(FileName);
sw.Write("dein Text");
sw.Close

Zum lesen aus einer Datei:


StreamReader sr = new StreamReader(FileName);
sr.Read();
sr.Close();

Wobei es natürlich zu den Konstruktoren noch mehrere Überladungen gibt und natürlich auch noch mehrere Methoden zum Schreiben und Lesen.

Gruss

Dennie Schmögner
Dipl. Ing. Informatik / Fachrichtung Automatisierungstechnik
Microsoft Business Intelligence 2005
SharePoint Portal Server 2007

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

ok, ich bekomme immer diese fehler meldung 🙁

SmsZeichen\Form1.cs(431): (An object reference is required for the nonstatic field, method, or property 'SmsZeichen.frmSms.strJahreszeit'

ich verstehe einfach die fehlermeldung nicht :S

mein code ist dieser:

static void Main() 
{
	Application.Run(new frmSms());

	using (StreamWriter sw = new StreamWriter("Season.txt")) 
	{
		// Add some text to the file.
		sw.WriteLine("Season for definition colors");
		sw.WriteLine("-----------------------------");
		// Arbitrary objects can also be written to the file.
		sw.Write("The season is: ");
		sw.WriteLine(strJahreszeit);	
		//sw.WriteLine(DateTime.Now);
	}
}

was stimmt nicht?

ps: die fehlermeldung bezieht sich auf strJahreszeit

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

D
280 Beiträge seit 2005
vor 18 Jahren

Hallo kiwi_girl

Ist deine Variable static???? Denn soweit ich weiss, kann man in einer static Methode auch nur static Variablen verwenden, da ja static deklarierte Methoden und Felder keiner Klasse zugeordnet sind.

Gruss

Dennie Schmögner
Dipl. Ing. Informatik / Fachrichtung Automatisierungstechnik
Microsoft Business Intelligence 2005
SharePoint Portal Server 2007

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

ups...🙂

aber wo kann ich den code sonst noch hinschreiben?

im visual studio index:

using System;
using System.IO;

class Test 
{
    public static void Main() 
    {
        // Create an instance of StreamWriter to write text to a file.
        // The using statement also closes the StreamWriter.
        using (StreamWriter sw = new StreamWriter("TestFile.txt")) 
        {
            // Add some text to the file.
            sw.Write("This is the ");
            sw.WriteLine("header for the file.");
            sw.WriteLine("-------------------");
            // Arbitrary objects can also be written to the file.
            sw.Write("The date is: ");
            sw.WriteLine(DateTime.Now);
        }
    }
}

ich habe strJahreszeiten zugewiesen auf verschiedene Begriffen:

// Hier wird die Hintergrundfarbe auf leichgelb (hellgelb) gesetzt, wenn man
// im Menu "Spring" klickt.
private void meiSpring_Click(object sender, System.EventArgs e)
{
	strJahreszeit = "Spring";
	frmSms.ActiveForm.BackColor = Color.LightYellow;
}

// Hier wird die Hintergrundfarbe auf Lavendell (hellblau) gesetzt, wenn man
// im Menu "Summer" klickt.
private void meiSummer_Click(object sender, System.EventArgs e)
{
	strJahreszeit = "Summer";
	frmSms.ActiveForm.BackColor = Color.Lavender;
}

und diese möchte ich abspeichern, so das ich beim nächsten programmstart diese aufrufen kann.

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

D
280 Beiträge seit 2005
vor 18 Jahren

Warum packst du nicht den StreamWriter in eine eigene Methode? Dann kannst du gleichzeitig mit try und catch exceptions abfangen und wenn es zwingend notwendig sein sollte, dann setzt du noch ein Flag an Hand dessen du den Erfolg oder Misserfolg ersehen kannst.

gruss

Dennie Schmögner
Dipl. Ing. Informatik / Fachrichtung Automatisierungstechnik
Microsoft Business Intelligence 2005
SharePoint Portal Server 2007

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

danke hat mir den blick geöffnet 🙂

hatte ein paar nervende fehler gemacht und deshalb hatte es nie funktioniert.

jetz muss ich nur noch schauen, ob ich die angaben wieder auslesen kann...

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

D
280 Beiträge seit 2005
vor 18 Jahren

Noch als Tip, schau dir die Überladungen der Konstruktoren an, das kann vielleicht wichtig werden.
Und für Details gibt es ja noch die MSDN Hilfe online.

Gruss

Dennie Schmögner
Dipl. Ing. Informatik / Fachrichtung Automatisierungstechnik
Microsoft Business Intelligence 2005
SharePoint Portal Server 2007

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

danke!

ich finde nie das was ich brauche in den msdn bibliothek und suche...ist die Hilfe viel anders?

bin immer offen für links 😁

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

D
280 Beiträge seit 2005
vor 18 Jahren

Aber Google kennst du schon oder? 🤔

StreamWriter MSDN

StreamReader MSDN

Das sollte fürs erste reichen.

Dennie Schmögner
Dipl. Ing. Informatik / Fachrichtung Automatisierungstechnik
Microsoft Business Intelligence 2005
SharePoint Portal Server 2007

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

danke für di links!

was ist google?? 😜
😁
"nei, seich..."

das problem welches ich jetzt habe ist, dass ich nicht weiss wie ich eine methode aufrufen kann, welches gerade als erstes startet (wenn das das richtige wort ist :S )

PS: ich weiss...bin anfänger auf der ganzen linie...🙂

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

D
280 Beiträge seit 2005
vor 18 Jahren

Keine Ahnung was du wirklich meinst, aber du kannst zum Beispiel im Konstruktor Methodenaufrufe unterbringen, ansonsten würden mir noch Interfaces einfallen um eine Methode zu einem bestimmten Zeitpunkt auszuführen. Events dürften vielleicht auch für dich in Frage kommen.

Dennie Schmögner
Dipl. Ing. Informatik / Fachrichtung Automatisierungstechnik
Microsoft Business Intelligence 2005
SharePoint Portal Server 2007

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

ok...

static void Main() 
{
	Application.Run(new frmSms());
	//dateiLesen();
}

private void dateiLesen()
{
	StreamReader sr = new StreamReader("Season.txt");

//	MessageBox.Show(sr.ReadLine());
	string ereignis = sr.ReadLine();

	if(ereignis == "Spring")
	{
		meiSpring.PerformClick();
	}
	else if(ereignis == "Summer")
	{
		meiSummer.PerformClick();
	}
	else if(ereignis == "Autumn")
	{
		meiAutumn.PerformClick();
	}
	else if(ereignis == "Winter")
	{
		meiWinter.PerformClick();
	}

	sr.Close();
//	return;
}

// Das Form wird geschlossen (Programm) per Klick auf einem Button
private void btnEnd_Click(object sender, System.EventArgs e)
{
	Close();
}

ich habe die methode dateiLesen und dieser würde ich gerne, gerade nach dem das formular erstellt worden ist, "starten". Weiss aber nicht wie ich dies tun soll.

danke

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

P
939 Beiträge seit 2003
vor 18 Jahren

Hi kiwi_girl,

Beim Erzeugen der Form wird zuerst der Konstruktor aufgerufen, da kannst du den dateiLesen-Aufruf mit reinsetzen.

static void Main() {
   Application.Run(new frmSms());
}

// Konstruktor
public frmSms() {

   // [..]

   dateiLesen();
}

private void dateiLesen() {
   // ...
}

Gruss
Pulpapex

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

leider kommt diese fehlermeldung:

SmsZeichen\Form1.cs(427): Class 'SmsZeichen.frmSms' already defines a member called 'frmSms' with the same parameter types

danke!

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

P
939 Beiträge seit 2003
vor 18 Jahren

Das heisst der Konstruktor ist schon definiert. Der dateiLesen-Aufruf muss in den schon definierten Konstruktor mit rein. Der zweite Konstruktor kann wieder gelöscht werden.

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

ups...!

danke 😁 habs ein bisschen zu spät gesehen...naja 🙂

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

-
885 Beiträge seit 2004
vor 18 Jahren

Hi kiwi_girl,

mein Arbeitskollege kann sogut wie garnicht programmieren (im Gegensatz zu dir), schaft es aber trotzdem die meisten Informationen aus dem Internet zu suchen. StreamWriter/Reader ist allein in diesem Forum in unzähligen Varianten verfügbar und hätte dir sicherlich einige Fragen beantwortet. Versteh mich bitte nicht falsch, aber manchmal ist es einfach besser, wenn man sich mal bisschen auf die Suche macht.

Achja und was mit noch aufgefallen ist, bitte verwende in Zukunft doch bitte einen aussagekräftigeren Themenname, denn mit "externe Datei" kann nicht jeder direkt was anfangen. Was hälst du von "Wie speichert man Eingaben in eine ext. Datei?"

P.S.: Mit (ereignis == "Spring") läufst du sehr schnell Gefahr auf "Nichterkennen", wenn nicht exakt der Ausdruck "Spring" in einer Zeile steht und denke daran, es darf NUR der Ausdruck in einer Zeile stehen mehr nicht. Besser ware es, wenn du nach dem Ausdruck in der jeweiligen Zeile suchst. Hinweis: substring-Methode.

P
939 Beiträge seit 2003
vor 18 Jahren

Hi -acid-,

das sind gute Ratschläge, die jeder im Hinterkopf behalten sollte.

Da wird schon beim "gute Ratschläge geben" sind, du solltest daran arbeiten, deine Fragen verständlicher zu formulieren. Wenn niemand antwortet, könnte es daran liegen, dass keiner versteht was du eigentlich willst.

Beispiel: Problem mit Hintergrundfarbe in Panel

Gruss
Pulpapex

-
885 Beiträge seit 2004
vor 18 Jahren

@Pulpapex

Wie schon erwähnt, ist es bei meinen Fragen definitv mir nicht möglich diese so zu stellen, dass jeder sofort sieht was ich meine. Deswegen habe ich es auch nochmal dazugeschrieben. Ich wäre dir also sehr verbunden, wenn du dich auch meinem Problem annimmst. Wenn du die Frage nicht richtig verstehst, dann schreib es dazu und ich erläutere es genauer. Ansonsten weiß ich nicht, dass die Frage einfach nur nicht verstanden wird.

So und um wieder zum Ursprung zu kommen, machen wir einfach in meinem Thread weiter, sofern du mir da helfen kannst 😉

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

ok, danke...

die tips merke ich mir.

-acid-
aber das wegen der suche....ich habe vorher mind. 2-4 std gesucht. ok, ich habe nach falsche kriterien gesucht, aber ich fänge erst gerade an mit programmieren und habe keine ahnung was es alles hat. auch hatte ich kein anhaltspunkt nach was ich suchen musste/sollte.

dein kolleg ist ja villeicht besser als ich...sehr wahrscheinlich 🙂

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

-
885 Beiträge seit 2004
vor 18 Jahren

*g* Ja kenn ich - ging mir auch Anfangs so - Viel Glück weiterhin 😉

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

wieder einmal eine Fehlermeldung:

An unhandled exception of type 'System.NullReferenceException' occurred in SmsZeichen.exe

Additional information: Object reference not set to an instance of an object.

ich habe keine ahnung, wie ich dies lösen kann...hier ist noch der code welches no helfen könnte

public frmSms()
{
	//
	// Required for Windows Form Designer support
	//
	InitializeComponent();

	//
	// TODO: Add any constructor code after InitializeComponent call
	//

	dateiLesen();
}
private void dateiLesen()
{
	StreamReader sr = new StreamReader("Season.txt");

//	MessageBox.Show(sr.ReadLine());
	string ereignis = sr.ReadLine();

	if(ereignis == "Spring")
	{
		meiSpring.PerformClick();
	}
	else if(ereignis == "Summer")
	{
		meiSummer.PerformClick();
	}
		else if(ereignis == "Autumn")
	{
		meiAutumn.PerformClick();
	}
	else if(ereignis == "Winter")
	{
		meiWinter.PerformClick();
	}

	sr.Close();
//	return;
}
 // Hier wird die Hintergrundfarbe auf Lavendell (hellblau) gesetzt, wenn man
// im Menu "Summer" klickt.
	private void meiSummer_Click(object sender, System.EventArgs e)
                {
//		strJahreszeit = "Summer";
		[COLOR]frmSms.ActiveForm.BackColor = Color.Lavender;
[/color]

		StreamWriter sw = new StreamWriter("Season.txt");
		sw.Write("Summer");
		sw.Close();
	}

die zeile, welches rot makiert ist, kommt die fehlermeldung

danke!

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

-
885 Beiträge seit 2004
vor 18 Jahren

Hi kiwi_girl. Hast du mal den Debugmodus mit F11 ausprobiert?

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

ja, habe ich, aber es hilft mir nicht weiter.

ich gloube es liegt etwas an der ausführung des letzten codeteil an dieser zeile:

frmSms.ActiveForm.BackColor = Color.Lavender;

hat jemand eine ahnung?

danke!

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo kiwi_girl,

die Doku sagt mir:

Ein Form, das das momentan aktive Formular darstellt, oder NULL (Nothing in Visual Basic), wenn kein Formular aktiv ist.

Wenn also kein Forumlar aktiv ist, tritt genau die Situation ein, die die Exception beschreibt.

System.NullReferenceExceptions sind eigentlich immer leicht zu finden und zu beheben.

herbivore

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

hallo herbivore,

sorry, aber ich weiss immer noch nicht wie ich dies lösen sollte :S

ich habe sogar, einen kolleg gefragt und dieser hat auch keine ahnung.

danke!

gruss kiwi_girl

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

P
939 Beiträge seit 2003
vor 18 Jahren

Die NullReferenceException tritt auf, wenn bei einer Variablen, die null ist, versucht wird, auf Eigenschaften oder Methoden zuzugreifen.

Beispiel:

string a = null; // String a ist null.
int length = a.Length;  // löst eine NullReferenceException aus.

In deiner Codezeile gibt es zwei potenzielle Objekte, die null sein könnten, entweder frmSms oder das Objekt in frmSms.ActiveForm.

frmSms.ActiveForm.BackColor = Color.Lavender;

Um die Exception zu umgehen, muss man vor dem Zugriff auf ungleich null prüfen (ich nehme mal an frmSms ist immer ungleich null):

if(frmSms.ActiveForm != null) {
   frmSms.ActiveForm.BackColor = Color.Lavender;
}

Gruss
Pulpapex

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

ich könnte die fehlermeldung schon abfange, aber dann macht das programm nicht das was ich möchte.
leider probiere ich diesen einen fehler schon zu lange zu lösen.

ich gloube ich weiss wo der fehler steckt und ich probiere es zu erläutern.

ich kann bei meinem programm die hintergrund farbe wechseln. wenn es die hintergrund farbe wechselt, schreibt das programm zur gleichen zeit, die bestimmte farbe (variable) in eine externe datei. jetzt will ich, wenn das programm startet, dass das programm die variable (farbe) ausliest und sie dann aktiviert. somit will ich, dass die vorherige gebrauchte hintergrundfarbe wieder erscheint.
der fehler liegt somit mit der aktivierung der farbe. den code habe ich schon 5 antworten vorher hineingeschrieben und er hat sich bis heute nicht geändert.

ich hoffe, diese erklärung ist verständlich.

gruss
kiwi_girl

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

P
939 Beiträge seit 2003
vor 18 Jahren

Gibt es in deiner Anwendung ein oder mehrere Fenster?

Wenn es nur ein Fenster ist, versuch es mal so:

private void meiSummer_Click(object sender, System.EventArgs e) {

   // Hintergrundfarbe im Anwendungsfenster ändern.
   this.BackColor = Color.Lavender;

   // ..
}

ActiveForm ist aber auch bei mehreren Fenstern verkehrt. Es soll ja die Hintergrundfarbe eines bestimmten Fensters geändert werden und nicht die von irgend einem zufälligerweise aktiven.

Gruss
Pulpapex

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

dann kommt schon die nächste fehlermeldung:

An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll

Additional information: The process cannot access the file "C:\Lehrjahr 2\NET\C# Übungen\SmsZeichen\SmsZeichen\bin\Debug\Season.txt" because it is being used by another process.

private void meiSummer_Click(object sender, System.EventArgs e)
{

// strJahreszeit = "Summer";
this.BackColor = Color.Lavender; //frmSms.ActiveForm.BackColor = Color.Lavender;

(**StreamWriter sw = new StreamWriter("Season.txt");**
sw.Write("Summer");  
sw.Close();  

}

ich weiss nicht, bei welchem anderen prozess ich diesen textFile gebrauche X(

gruss
kiwi_girl

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!

kiwi_girl Themenstarter:in
49 Beiträge seit 2005
vor 18 Jahren

so das problem wäre endlich gelöst 🙂

ich hatte einen völlig flaschen ansatz...anstatt den _click auszulösen, habe ich einfach anfang an this.backcolor = color. ... geschrieben und schon hat man kein problem 🙂

ich danke allen für die hilfe

gruss
kiwi_girl

grüessli
kiwi_girl

@->->- Love is the one thing on earth that everyone wishes for with the whole heart!