Datei öffnen und schreiben

sPONGe

Grünschnabel
ya, ich bin zwar kurz davor eine Datei per Button zu öffnen, aber einiges fehlt da noch.

Code:
private void button1_Click_1(object sender, System.EventArgs e)
		{
			Stream myStream;
			OpenFileDialog openFileDialog1 = new OpenFileDialog();

			openFileDialog1.InitialDirectory = "c:\\" ;
			openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
			openFileDialog1.FilterIndex = 2 ;
			openFileDialog1.RestoreDirectory = true ;

			if(openFileDialog1.ShowDialog() == DialogResult.OK)
			{
				if((myStream = openFileDialog1.OpenFile())!= null)
				{
					// Insert code to read the stream here.
					myStream.Close();
				}
			}
		}

Was fehlt da noch? Schon yetz vielen Dank für Eure Antworten.
 

Alexander Schuc

crazy-weasel
Hallo sPONGe.

Was genau willst du denn wissen? Dein Code erstellt einen Stream zu der gewünschten Datei. Jetzt kannst du die Methoden der Stream-Klasse nutzen.

Da du aber als Filter des OpenFileDialogs '*.txt' angegeben hast, denke ich du willst irgendwie mit Text arbeiten.
Dafür gibt es etwas besseres als die normale Stream Klasse.

Die StreamReader-Klasse. Diese besitzt Methoden um den gesamten Text einer Datei, oder auch diesen Zeilenweise einzulesen. Eventuel benötigst du dies.


Code:
private void button1_Click_1(object sender, System.EventArgs e)
{
	StreamReader myStream;
	OpenFileDialog openFileDialog1 = new OpenFileDialog();

	openFileDialog1.InitialDirectory = "c:\\" ;
	openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
	openFileDialog1.FilterIndex = 2 ;
	openFileDialog1.RestoreDirectory = true ;
	
	if(openFileDialog1.ShowDialog() == DialogResult.OK)
	{
		if(File.Exists(openFileDialog1.Filename))
		{
			myStream = File.OpenText(openFileDialog1.Filename);
			// Insert code to read the stream here.
			myStream.Close();
		}
	}
}

Ich kann jetzt nur hoffen, dass dies eine 'befriedigende' Antwort ist. Wenn dem aber nicht so ist, stelle deine Fragen genauer.

Mfg,
Alex

// Edit:

Hab jetzt gerade das Thema des Beitrags gelesen. Da steht ja auch dabei "und schreiben".
Wenn du Text in eine Datei schreiben willst, es gibt die Methode OpenWrite und CreateText in der File-Klasse.
Beide kannst du benutzen, je nach Situation.
Ausserdem könntest du dir ein StreamWriter Objekt erzeugen.

StreamWriter Klasse
File - Klasse
 
Zuletzt bearbeitet:

sPONGe

Grünschnabel
ya, eigentlich müsste es einfacher gehen...

...ich will ein Text-File öffnen (der Pfad ist bekannt) per Button. Und dann zeilenweise in eine ListBox einlesen.

Wäre so sogar noch besser, wenn die File im Hintergrund geöffnet wird.
 

Alexander Schuc

crazy-weasel
Code:
private void ReadFile(string Path)
{
	StreamReader reader = new StreamReader(Path, true); // Datei öffnen, Encoding erkennen lassen
	reader.BaseStream.Seek(0,SeekOrigin.Begin); // an den Anfang der Datei gehen
	while (reader.Peek() != -1) // solange Daten vorhanden sind weitermachen ..
	{
		MyListBox.Items.Add(reader.ReadLine());
	}
}

Das wäre der Code.
Es ist eine Methode welche den Pfad zu einer Datei verlangt. Wenn sie aufgerufen wird, öffnet sie die Datei, springt an den Anfang, und geht von dort jede Zeile durch und gibt diese in ein ListBox-Control.
Hättest gleich so fragen können.
 

sPONGe

Grünschnabel
ich rufe nun mit einem Button auf:

ReadFile("C:\\test.txt");

soooo, folgende Fehler sind aufgetreten:

C:\Visual Studio Projects\Reminder\Form1.cs(461): Der Typ oder Namespace 'SeekOrigin' konnte nicht gefunden werden. Möglicherweise fehlt eine Anweisung oder ein Assemblyverweis.

C:\Dokumente und Einstellungen\Martin\Eigene Dateien\Visual Studio Projects\Reminder\Form1.cs(460): Der Typ oder Namespace 'StreamReader' konnte nicht gefunden werden. Möglicherweise fehlt eine Anweisung oder ein Assemblyverweis.

C:\Dokumente und Einstellungen\Martin\Eigene Dateien\Visual Studio Projects\Reminder\Form1.cs(461): Der Typ oder Namespacename 'BaseStream' ist in der Klasse oder dem Namespace 'Reminder' nicht vorhanden (fehlt ein Assemblyverweis?)

C:\Dokumente und Einstellungen\Martin\Eigene Dateien\Visual Studio Projects\Reminder\Form1.cs(462): Der Typ oder Namespacename 'Peek' ist in der Klasse oder dem Namespace 'Reminder' nicht vorhanden (fehlt ein Assemblyverweis?)

C:\Dokumente und Einstellungen\Martin\Eigene Dateien\Visual Studio Projects\Reminder\Form1.cs(464): Der Typ oder Namespacename 'ReadLine' ist in der Klasse oder dem Namespace 'Reminder' nicht vorhanden (fehlt ein Assemblyverweis?)


ist bestimmt nur ein Fehler...aber weiß nicht wo ich noch was dran schrauben muss...vielen Dank für eure Antworten im Voraus!
 

Alexander Schuc

crazy-weasel
Hallo,
bitte achte auf die Schreibweise deiner Beiträge.
Wie du in der Netiquette beim Punkt 12 nachlesen kannst kann 'unschönes' Schreiben bishin zur Sperrung führen.

Zu deinem Problem.
Du wirst ein "using System.IO;"-Statement benötigen.

Mfg,
Alex
 

sPONGe

Grünschnabel
sorry...habs rausgefunden...ich glaub', dass System.IO gefehlt hat.

Vielen Dank für deine Lösung...sehr elegant finde ich.

Happy new year!