Entwickler-Ecke

Basistechnologien - Wie kann ich bei einem StreamWriter eine .html Endung adden?


Csharp-programmierer - Fr 07.08.15 21:57
Titel: Wie kann ich bei einem StreamWriter eine .html Endung adden?
Hallo ihr Experten. Ich habe es jetzt geschafft 3 Hauptordner mit jeweils 2 Unterordnern zu erstellen und deren Pfade zu speichern. Meine Speichern und Speichern_Unter- Funktionen hauen einwandfrei hin:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
 private void speichern_unter()
        {
            Form2 a = new Form2();
            a.label1.Text = "Bitte geben Sie den Namen des Projekts ein: ";
            a.ShowDialog();

            if(Form2.eingabe != null)
            {
                try
                {
                    html_pfad = Path.Combine(Properties.Settings.Default.sHTML, Form2.eingabe.ToString());

                    using (StreamWriter writer1 = new StreamWriter(html_pfad))
                    {
                        writer1.Write(rtb_html.Text);
                        writer1.Close();
                        ist_gespeichert = true;
                    }

                    css_pfad = Path.Combine(Properties.Settings.Default.sCSS, Form2.eingabe.ToString());

                    using(StreamWriter writer2 = new StreamWriter(css_pfad))
                    {
                        writer2.Write(this.rtb_css.Text);
                        writer2.Close();
                        ist_gespeichert = true;
                    }
                }
                catch(Exception re)
                {
                    MessageBox.Show(re.Message);
                }
            }
        }


Die Datei wird nun perfekt in die jeweiligen Ordner geschrieben und es haut alles Perfekt hin, wäre da nicht die .html / .css Endung :motz:

Bei einem SaveFileDialog wüsste ich, was ich machen muss:

C#-Quelltext
1:
2:
3:
OpenDileDialog open = new OpenFileDialog();
open.Filter = "HTML- Datei|*.html|CSS- Datei|*.css";
open.DefaultExt = "*.html";


und dann einfach:

C#-Quelltext
1:
2:
3:
4:
5:
using(StreamWriter s = new StreamWriter(path))
{
 s.Write(rtb_html.Text);
 s.Close();
}


Und dann hat die Datei die .html Endung. Wie bekomme ich das ohne SaveFileDialog hin? Ich möchte ihn nicht aufrufen, da ich dies in meinem derzeitigem Projekt unprofessionell finde.

Könnt ihr mir bitte weiterhelfen?
Mfg :)


Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Sa 08.08.2015 um 09:10


Palladin007 - Fr 07.08.15 22:42

Warum unprofessionell?
Das nutzen viele Anwendungen, es hat den Vorteil, dass der Speichern-Dialog immer gleich aus sieht.

Wenn Du es aber wirklich nicht willst:


C#-Quelltext
1:
2:
3:
4:
5:
var path = "C:\some\cool\directories\myfile";
path += ".html"// <--
using (StreamWriter writer1 = new StreamWriter(path)) {
    // write to file
}


An den Stream kannst Du keine Dateiendung anhängen, der betrifft nur den Inhalt der Datei und hat damit nichts mit dem Datei-Namen zu tun. Den Namen musst Du beim erstellen der Datei angeben. Wenn der Dateiname eine Endung haben soll, muss der da mit angehängt werden.
Oder Du kopierst die Datei danach, aber das wäre ziemlich umständlich :D


Als kleine Zusatz-Info:

Die Dateiendung hat im Grunde überhaupt keine Bedeutung. Das ist ein Teil vom Namen, wie alles andere auch, die kannst ja auch so viele Punkte in den Namen schreiben, wie Du willst, einzig eine Datei, die nur Punkte als Namen hat, geht nicht :D
Die Endung gewinnt dadurch an Bedeutung, da verschiedene Anwendungen damit verknüft werden, als einfacher Weg, den Inhalt bzw. das Format einer Datei zu markieren.


Ralf Jansen - Fr 07.08.15 22:57

Form2.eingabe.ToString() enthält den Filenamen?

Dann würde ich mit


C#-Quelltext
1:
2:
html_pfad = Path.Combine(Properties.Settings.Default.sHTML, Form2.eingabe.ToString());
html_pfad = Path.ChangeExtension(html_pfad, ".html");


die Endung anhängen bzw. ersetzen. Jemand könnte ja in Form2.eingabe schon was mit Extension eingetragen haben.


Csharp-programmierer - Fr 07.08.15 23:33

Das heißt also ich kann es so machen:


C#-Quelltext
1:
2:
string x = Path.Combine(path, filename);
string y = Path.ChangeExtension(x, ".html);


Das hat die selbe Bedeutung wie

C#-Quelltext
1:
2:
string x = Path.Combine(path, filename);
string y += ".html";
?

Mfg


Ralf Jansen - Fr 07.08.15 23:43

Nein.
Im 1.ten Fall hängst du immer eine Extension dran. Im 2.ten ersetzt du eine eventuell vorhandene Extension oder hängst eine dran falls noch keine vorhanden war.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
string path = Path.Combine(@"C:\test"@"file.name");
Console.WriteLine(path + ".html");
Console.WriteLine(Path.ChangeExtension(path, ".html"));

path = Path.Combine(@"C:\test"@"filename");
Console.WriteLine(path + ".html");
Console.WriteLine(Path.ChangeExtension(path, ".html"));

Ausgabe

Quelltext
1:
2:
3:
4:
5:
C:\test\file.name.html
C:\test\file.html

C:\test\filename.html
C:\test\filename.html


Csharp-programmierer - Sa 08.08.15 18:19

Vielen Dank für eure Hilfreichen Antworten :)