C# Datei Abspeicherung mit einem String

Hallo :slight_smile:

Ich häng seit einiger Zeit an einem Code und bekomme es einfach nicht hin.
Und zwar hab ich aktuell 2 richTextBoxen und ein Button. Wenn ich auf den Button drücke soll es die Inhalte der 2 Boxen in eine Datei speichern (Würde sagen .rte ist am optimalsten?) und dann die Form schliessen. Der Name der Datei soll von der ersten richTextBox ausgelesen werden. Ich hab bereits etwas Code aber von hier an komme ich einfach nicht weiter, vielleicht kann mir da jemand behilflich sein.

[CSHARP]
private void button1_Click(object sender, EventArgs e)
{
string path1 = „C:\…\Path“;
string sName = richTextBox1.Text;
StreamWriter sw = new StreamWriter(path1);
sw.WriteLine(richTextBox1);
sw.WriteLine(richTextBox2);
sw.Close();
this.Close();
}
[/CSHARP]

  1. RTF -> Rich Text Format. Solltest als RTF abspeichern.
  2. Rich Text Boxes haben bereits eine Methode um den Text abzuspeichern. Möchtest du den Plain Text oder das RTF abspeichern? Je nachdem musst du anders vorgehen.

Siehe auch das Beispiel in der MSDN.


richTextBox1.LoadFile("C:\\MyDocument.rtf");
    richTextBox1.Find("Text", RichTextBoxFinds.MatchCase);

    richTextBox1.SelectionFont = new Font("Verdana", 12, FontStyle.Bold);
    richTextBox1.SelectionColor = Color.Red;

    richTextBox1.SaveFile("C:\\MyDocument.rtf", RichTextBoxStreamType.RichText);

    this.Controls.Add(richTextBox1);

Also der Inhalt soll in einer Datei abgespeichert werden, damit dieser wieder abgerufen werden kann.
Man soll mehrere .rtf Dateien erstellen können, deswegen möchte ich das ganze mit dem String erstellen.
Das Problem bei dem Beispiel ist eben, dass die Datei einen festen Namen hat. Wenn ich das so machen würde, würde ja alles in die gleiche Datei gespeichert werden.

schlingel wollte dir auch nur zeigen, wie leicht es ist mit der RichTextBox aus einer Datei zu lesen bzw. zu speichern. Die Lösung will er dir nicht einfach hinwerfen.

Was hindert dich daran diese Zeile
[CSHARP]
richTextBox1.SaveFile(“C:\MyDocument.rtf”, RichTextBoxStreamType.RichText);
[/CSHARP]
so anzupassen damit sie das macht was du willst (den Namen der Datei aus RichTextBox1 auszulesen)?

So wie ich das sehe ist bei dir die richTextBox1 die Pfadeingabe. Das solltest du über den SaveFileDialog lösen. Dieser gibt dir dann mittels OpenFile() einen Stream zurück in das du den RTF-Text speichern kannst mittels SafeFile.

Die Möglichkeit mit dem SaveFileDialog hab ich auch schon gesehen, würde die aber nur nehmen wenn es nicht geht. Bei dem System sollte das eben im Hintergrund selbst gespeichert werden, ohne das es vom Benutzer ausgewählt werden muss. @Pippl
Ich hab bereits ein wenig probiert, es aber nicht hinbekommen:) (Relativ neu in der Branche)

Irgendwie musst du aber an den Pfad kommen. Da bleibt dir nur:
a) über config
b) generieren
c) diesen mindestens 1x durch den Anwender bestimmen lassen.

Ich denke bei deiner Anwendung läuft es auf c) hinaus. Also lässt du beim Speichern von einem neuen Dokument einfach den Dialog anzeigen und merkst dir dann den Speicherort. Wird ein Dokument geöffnet, dann hast du ja bereits den Pfad und du kannst speichern - ohne den Nutzer „belästigen“ zu müssen.

Das ist keine Fehlerbeschreibung. Was hast du probiert? Gab es Fehler? Code wäre in diesem Fall nicht schlecht, dann kann hier jemand drüber schauen.

Man kann den Pfad doch bereits im Code angeben, oder sehe ich das falsch?

Bis zu einem gewissen Grad ja. Z.B. könnte man das Benutzerverzeichnis wählen, dort einen Unterordner erstellen und die Dokumente dort ablegen. Mit Java kann man sich dieses einfach geben lassen System.getProperty("user.home");, aber keine Ahnung wie das bei C# ausschaut. Alles andere wäre aber wohl keine gute Idee - da sich die Pfade von System zu System unterscheiden können.

Wenn ich mich nun für die Methode mit dem SaveFileDialog entscheide, ist es möglich, dass wenn es den Dialog öffnet, dass das eingegebene vom Titel bereits als Dateinamen steht?