Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

StreamWriter.WriteLine() is not working

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.

like image 986
Brandon Gross Avatar asked Dec 23 '12 08:12

Brandon Gross


People also ask

Where does StreamWriter write to?

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.

Will StreamWriter create a file?

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.

What is StreamWriter in VB net?

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.

What is StreamWriter and StreamReader in C#?

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.


1 Answers

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.

like image 95
shivesh suman Avatar answered Nov 15 '22 16:11

shivesh suman