Wie kann mit einem Textwidget (Mono) eine Datei speichern

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
ralli
Beiträge: 4382
Registriert: 02.03.2008 08:03:02

Wie kann mit einem Textwidget (Mono) eine Datei speichern

Beitrag von ralli » 05.03.2012 04:59:41

In den letzten Tagen habe ich mich mal mit Mono für Linux (C#) beschäftigt und benutze als IDE MonoDevelop unter Squeeze. Das klappt auch schon ganz gut und die Lernkurve steigt stetig an.

Jetzt bin ich dabei meinen OcrMaker (eine GUI für die Texterkennung mit tesseract) zu portieren, dabei habe ich ein Problem, wobei ich mir schon einen Wolf gegoogelt habe.

Es geht darum, einen Text, der in einem Textwidget (textview) ist, auf die Festplalte mit FilechooserDialog zu schreiben. Das Lesen funktioniert einwandfrei, aber hier komme ich leider nicht weiter.

Dies ist der Code zum Öffnen einer Datei:

Code: Alles auswählen

protected virtual void OnOpenActionActivated (object sender, System.EventArgs e)
	{
		
		// Dokument öffnen
		
		// Setze textview1 zurück und wechsel das Fenster zurück zur Originalgröße
		
     int width, height;
     this.GetDefaultSize( out width, out height );
     this.Resize( width, height );
     
     textview1.Buffer.Text = "";
     
     // Erstelle und zeige einen Dateiauswahldialog
		
     FileChooserDialog chooser = new FileChooserDialog(
        "Bitte wähle ein Dokument ...",
        this,
        FileChooserAction.Open,
        "Abbruch", ResponseType.Cancel,
        "Öffnen", ResponseType.Accept );
     
     if( chooser.Run() == ( int )ResponseType.Accept )
     {
        // Öffne Dokument zum Lesen
			
        System.IO.StreamReader file =
        System.IO.File.OpenText( chooser.Filename );
        
        // Kopiere den Inhalt in das Textwidget textview1
			
        textview1.Buffer.Text = file.ReadToEnd();
        
        // Setze den MainWindow Titel für den Dateinamen
			
        this.Title = "OcrMaker -- " + chooser.Filename.ToString();
        
        // Mach das MainWindow größer
			
        this.Resize( 640, 480 );
        
        // Schliesse das Textdokument
			
        file.Close();
			
     } // end if
		
     chooser.Destroy();
		
  } // Ende Methode OnOpen
Und das funktioniert auch einwandfrei.

Und dies der Code zum Speichern einer Textdatei:

Code: Alles auswählen

protected virtual void OnSaveActionActivated (object sender, System.EventArgs e)
	{
		
		// Dokument speichern
		
			// Setze textview1 zurück und wechsel das Fenster zurück zur Originalgröße
		
     int width, height;
     this.GetDefaultSize( out width, out height );
     this.Resize( width, height );
     
     textview1.Buffer.Text = "";
     
     // Erstelle und zeige einen Dateiauswahldialog
		
     FileChooserDialog chooser = new FileChooserDialog(
        "Bitte wähle ein Dokument ...",
        this,
        FileChooserAction.Save,
        "Abbruch", ResponseType.Cancel,
        "Speichern", ResponseType.Accept );
     
     if( chooser.Run() == ( int )ResponseType.Accept )
     {
        // Speichere Dokument
	
	
******************************

Hier sollte der Code drin stehen zum Speichern. Irgendwie muss ich textview1.buffer.text, der ja den Text des Textwidgets enthält, wahrscheinlich an 			
 
System.IO.StreamWriter file =
        System.IO.File.SaveText( chooser.Filename );    
        
übergeben, oder? Was mache ich falsch?

*******************************

        // Setze den MainWindow Titel für den Dateinamen
			
        this.Title = "OcrMaker -- " + chooser.Filename.ToString();
        
        // Mach das MainWindow größer
			
        this.Resize( 640, 480 );
        
        // Schliesse das Textdokument
			
        // file.Close();
			
     } // end if
		
     chooser.Destroy();
		
  } // Ende Methode OnSave
Kann mir bitte jemand helfen, der sich damit auskennt? Danke!
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

Benutzeravatar
ralli
Beiträge: 4382
Registriert: 02.03.2008 08:03:02

Re: Wie kann mit einem Textwidget (Mono) eine Datei speicher

Beitrag von ralli » 05.03.2012 09:00:55

Und hier ist die selbsterarbeitete Lösung:

Code: Alles auswählen

protected virtual void OnSaveActionActivated (object sender, System.EventArgs e)
	{
		
		// Dokument speichern
		
		// Setze textview1 zurück und wechsel das Fenster zurück zur Originalgröße
		
     int width, height;
     this.GetDefaultSize( out width, out height );
     this.Resize( width, height );
               
     // Erstelle und zeige einen Dateiauswahldialog
		
     FileChooserDialog chooser = new FileChooserDialog(
        "Bitte Dokumentenname eingeben ...",
        this,
        FileChooserAction.Save,
        "Abbruch", ResponseType.Cancel,
        "Speichern", ResponseType.Accept );
     
      if( chooser.Run() == ( int )ResponseType.Accept )
      {
			
        // Speichere Dokument
			
		System.IO.StreamWriter sw = new System.IO.StreamWriter(chooser.Filename);
		
		// Speichert den Inhalt des Textwidget textview1 auf die Festplatte
			
        sw.Write(textview1.Buffer.Text);
		        			
        sw.Close();
		             
        // Setze den MainWindow Titel für den Dateinamen
			
        this.Title = "OcrMaker -- " + chooser.Filename.ToString();
        
        // Mach das MainWindow größer
			
        this.Resize( 640, 480 );
        
			
     } // end if
		
      chooser.Destroy();
		
  } // Ende Methode OnOpen
Wer nicht lieben kann, muß hassen. Wer nicht aufbauen kann muß zerstören. Wer keine Brücken baut, muß spalten.

Antworten