Antibiotik Geschrieben 9. Februar 2005 Geschrieben 9. Februar 2005 hallo, ich möchte meinen stringinhalt in eine Datei schreiben. ist die datei nicht da muss ich erzeugen, sonst überschreiben. ich hab aber leider keine Ahnung wie ich des anstelle. Ciao Antibiotik Zitieren
Mister A Geschrieben 9. Februar 2005 Geschrieben 9. Februar 2005 Schau dir mal den Namespace System.IO genauer an. Dort befinden sich streamWriter (?) Klassen und deren Erben, die das erledigen können. Zitieren
bigredeyes Geschrieben 9. Februar 2005 Geschrieben 9. Februar 2005 aus msdn <code> using System; using System.IO; using System.Collections; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; class SerializeTest{ public static void Main(String[] args) { Console.WriteLine ("Objektdiagramm erstellen"); ArrayList l = new ArrayList(); for (int x=0; x< 10; x++) { Console.WriteLine (x); l.Add (x); } // end for Console.Write ("Objektdiagramm wird auf Datentrger serialisiert."); Stream s = File.Open("foo.bin", FileMode.Create, FileAccess.ReadWrite); BinaryFormatter b = new BinaryFormatter(); b.Serialize(s, l); s.Close(); Console.WriteLine ("Abgeschlossen."); Console.Write ("Objektdiagramm wird auf Datentrger deserialisiert."); Stream r = File.Open("foo.bin", FileMode.Open, FileAccess.Read); BinaryFormatter c = new BinaryFormatter(); ArrayList p = (ArrayList) c.Deserialize®; Console.WriteLine ("Abgeschlossen."); foreach (int i in p) { Console.WriteLine (i); } r.Close(); Console.WriteLine ("\r\nDrcken Sie zum Beenden die EINGABETASTE."); Console.Read(); } // end main } // end class </code> wenn die datei vorher weg muss, gibt es noch File.Delete("c:\*.*"); bigredeyes Zitieren
mhaedicke Geschrieben 9. Februar 2005 Geschrieben 9. Februar 2005 Ich glaub so gehts einfacher using System.IO; private void BeliebigeMethode() { try { using (StreamWriter writer = File.CreateText(@"C:\Temp\Testdatei.txt")) { //Hier den Dateiinhalt schreiben writer.WriteLine("Das ist ein Testtext"); } } catch { //Hier definieren, wie sich im Fehlerfall verhalten werden soll. } } Das erstellt eine Datei im Verzeichnis "C:\Temp" und legt dort eine Datei "Testdatei.txt" an. Falls eine solche Datei vorhanden ist, wird diese überschrieben. Dabei kann es natürlich zu einem Fehler kommen (dann wenn z.B. nicht auf die Datei zugegriffen werden kann, weil die noch jemand auf hat). Zitieren
Antibiotik Geschrieben 9. Februar 2005 Autor Geschrieben 9. Februar 2005 hallo zusammen, danke für die antworten. habs hinbekommen. Ciao Antibiotik Zitieren
h3ll5ur7er Geschrieben 17. Januar 2011 Geschrieben 17. Januar 2011 Ich hätte da mal ne Anschlussfrage.. Ich habe eine for Schleife, die bei jedem Durchlaufen einen Wert zurückgibt. Diese Werte möchte ich in einer .txt Datei speichern. Mein Problem: Es wird immer nur der Wert geschrieben der zuletzt ausgegeben wird. Meine Frage: Wie kann man alle Werte (zb jeden auf einer neuen Zeile) die zurückgegeben werden speichern? thx h3ll5ur7er Zitieren
mhaedicke Geschrieben 17. Januar 2011 Geschrieben 17. Januar 2011 Du möchtest also eine bestehende Datei erweitern statt sie durch eine neu zu ersetzten, richtig? In dem Fall kannst du das Beispiel von oben ebenfalls verwenden. Allerdings verwendest du dann statt File.CreateText(... eben File.AppendText(... MfG Martin H. Zitieren
lilith2k3 Geschrieben 17. Januar 2011 Geschrieben 17. Januar 2011 public void Serialize(IEnumerable ObjectToSerialize) { using (StreamWriter sw = new StreamWriter(filename, true)) { foreach (var item in ObjectToSerialize) { sw.Write("{0},", item); } sw.Close(); } } [/PHP] Zitieren
Rekon1602 Geschrieben 18. Januar 2011 Geschrieben 18. Januar 2011 Wäre es nicht schöner/eleganter wenn man nicht jedes mal in die Datei schreibt, sondern erst alles zu einem String zusammenfügt und dann am Ende diesen String schreibt??? private void writeToFile(string[] text) { string toWrite = ""; foreach( string val in text) toWrite += val; // evtl noch + "\n" using(StreamWriter writer = new StreamWriter(path, true)) { writer.Write(toWrite); writer.Flush(); writer.Close(); } } Zitieren
Guybrush Threepwood Geschrieben 18. Januar 2011 Geschrieben 18. Januar 2011 Dann solltest du aber niemals ein String Objekt verändern sondern einen StringBuilder nehmen Zitieren
Rekon1602 Geschrieben 18. Januar 2011 Geschrieben 18. Januar 2011 Ok Was ich schon immer mal wissen wollte (Hoffe ich kann das hier mal kurz fragen und meine Frage ist nicht allzu dumm....) Welche Vorteile bietet denn ein StringBuilder gegenüber der einfach aneinanderkettung von Strings??? Zitieren
Guybrush Threepwood Geschrieben 18. Januar 2011 Geschrieben 18. Januar 2011 Weil wenn du die string Klasse verwendest jedesmal ein neues Objekt erzeugt wird. Das schafft natürlich einen erheblichen Overhead und gerade in Schleifen ist der StringBuilder da deutlich im Vorteil da hier einfach nur das vorhandene Objekt erweitert wird. Zitieren
lilith2k3 Geschrieben 18. Januar 2011 Geschrieben 18. Januar 2011 (bearbeitet) Wäre es nicht schöner/eleganter wenn man nicht jedes mal in die Datei schreibt, sondern erst alles zu einem String zusammenfügt und dann am Ende diesen String schreibt??? Elegant in welchem Sinne? foreach (var item in ObjectToSerialize) { sw.Write("{0},", item); } sw.Close();[/PHP] In dem Falle sehe ich auf einen Blick, dass über [i]ObjectToSerialize[/i] iteriert wird und entsprechend [i]item[/i]weise in den Stream geschoben wird. [PHP] using(StreamWriter writer = new StreamWriter(path, true)) { writer.Write(toWrite); writer.Flush(); writer.Close(); } Das sehe ich hier nicht. Mal ganz davon abgesehen, dass ich bei längerem Code nachschlagen müsste, was hier eigentlich geschrieben wird. toWrite ist eher Nichtssagend. Am Rande: string toWrite = ""; // besser = String.Empty Technisch gesehen wird der Code wohl so ausgeführt werden, wie Du ihn schreibst, i.e. es wird erst ein Puffer beschrieben, der anschließend auf Platte weggeschrieben wird. Zum Thema StringBuilder: Concatenating Strings Efficiently Bearbeitet 18. Januar 2011 von lilith2k3 Zitieren
SilentDemise Geschrieben 20. Januar 2011 Geschrieben 20. Januar 2011 Vor allem ist der Stringbuilder bei einer großen Anzahl von strings schneller. Zitieren
Nici6 Geschrieben 25. Februar 2011 Geschrieben 25. Februar 2011 Ich hab hierzu auch mal ne Anschlussfrage: und zwar möchte ich das mein Programm mir immer eine neue Textdatei erstellt(was es auch tut) und im Namen der Textdatei soll das aktuelle Datum und Uhrzeit stehen. Das Datum ist kein Problem aber bei der Uhrzeit bricht er immer ab. Kann mir jemand helfen? Danke und Gruß Zitieren
Klotzkopp Geschrieben 25. Februar 2011 Geschrieben 25. Februar 2011 Bedenke, dass Windows-Dateinamen keine Doppelpunkte enthalten dürfen. Zitieren
Nici6 Geschrieben 25. Februar 2011 Geschrieben 25. Februar 2011 Kann ich die irgendwie durch Striche oder so ersetzen? Bzw hab ich ne Möglichkeit trotzdem die Uhrzeit mit rein zu bringen in den Namen? Danke und Gruß Zitieren
SilentDemise Geschrieben 25. Februar 2011 Geschrieben 25. Februar 2011 wenn du ein string replace auf : zu - machst z.b. ja. oder du nimmst eine andere Datumsform a la 20110225 oder so... sortiert sich auch sehr schön danach Zitieren
Metaller Geschrieben 26. Februar 2011 Geschrieben 26. Februar 2011 Habe auch noch eine Frage Mit dem StreamReader kann man ja sagen in wlecher Codirung die Datei vorliegt. Kann man dem StreamWriter auch sagen in welcher Codierung er die Datei nachher abspeichern soll? Ich bekomm nämlich leider nur müll aus der Datei. Zitieren
lilith2k3 Geschrieben 26. Februar 2011 Geschrieben 26. Februar 2011 Schau doch nach StreamWriter Properties (System.IO) Zitieren
AnDi_P Geschrieben 27. Februar 2011 Geschrieben 27. Februar 2011 Am Rande: string toWrite = ""; // besser = String.Empty Kannst Du, oder jemand Anders, mir sagen, was hier genau der Unterschied ist bzw. warum man lieber String.Empty benutzen sollte? MfG AnDi_P Zitieren
lilith2k3 Geschrieben 27. Februar 2011 Geschrieben 27. Februar 2011 Kannst Du, oder jemand Anders, mir sagen, was hier genau der Unterschied ist bzw. warum man lieber String.Empty benutzen sollte? Ich finde String.Empty trägt zur Lesbarkeit bei - der Autor macht deutlich, dass er einen Leerstring intendiert hat; und nicht, dass der String aus irgendwelchen Gründen leer ist. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.