I am trying to write several lines, one at a time, to a .txt file using StreamWriter.WriteLine (Not statically).
const string filename = "BasicTestInfo.txt";
using (var writer = new StreamWriter(filename, false))
{
writer.WriteLine("{0} 350 200 200 10 2 28 20 200 2500 1200 1 1", Player1);
writer.WriteLine("{0} 300 150 150 4 2 15 18 150 2500 1000 1 0", Player2);
writer.WriteLine("{0} 200 140 450 25 14 10 70 4500 2500 750 1 1", Player3);
writer.WriteLine("{0} 175 120 400 15 3 8 50 3000 2500 850 1 0", Player4);
writer.WriteLine("{0} 300 100 300 8 1 4 30 1000 2500 1200 1 0", Player5);
writer.WriteLine("{0} 450 310 450 20 5 5 35 1500 2500 700 1 1", Player6);
}
Each of the player objects are string cosntants. If I run this with a different filename (a.k.a. BasicTestInfo2.txt) it creates that file in the bin.Debug, but it's empty. I know that I am reaching the inside of the using block (I put a Console.WriteLine in there), and I know that I want to Truncate which is why I am using false for append (Although replacing the false with true or no parameter at all does not fix the problem).
The basic problem is that even though the file gets created, there are no lines of text in the file.
StreamWriter. WriteLine() method writes a string to the next line to the steam. The following code snippet creates and writes different author names to the stream.
The first step to creating a new text file is the instantiation of a StreamWriter object. The most basic constructor for StreamWriter accepts a single parameter containing the path of the file to work with. If the file does not exist, it will be created. If it does exist, the old file will be overwritten.
The StreamWriter class is derived from the TextWriter class and can be used to write text to a stream. You can create an instance of the StreamWriter class by assigning it a Stream object returned by a method call, or by passing a file path to one of its constructors.
The StreamReader and StreamWriter classes are used for reading from and writing data to text files. These classes inherit from the abstract base class Stream, which supports reading and writing bytes into a file stream.
Yes it is true that in VB.net this (an exclusive flush) was not needed with the default settings but with C# you need a Writer.Flush call to force the write. Of course - Writer.Close() would force the flush as well. Alternatively we can set the AutoFlush Property of the StreamWriter instance:
sw.AutoFlush = true;
// Gets or sets a value indicating whether the StreamWriter
// will flush its buffer to the underlying stream after every
// call to StreamWriter.Write.
From: http://msdn.microsoft.com/en-us/library/system.io.streamwriter.autoflush(v=vs.110).aspx
Note that: the "using" construct will obviate an exclusive flush, but a lot of people are landing here just on the basis of subject of this question and this is the lowest hanging fruit when faced with the issue.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With