Zum Inhalt springen

C#: text in datei schreiben


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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).

  • 5 Jahre später...
Geschrieben

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

Geschrieben

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.

Geschrieben

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();

   }

}

Geschrieben

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???

Geschrieben (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 von lilith2k3
  • 1 Monat später...
Geschrieben

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ß

Geschrieben

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.

Geschrieben

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

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...