2

Why does this code not write my string to the file:

 string file = "Myfile.txt"; MemoryStream ms = new MemoryStream(); void writeToFile(string text) { System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding(); byte[] barr = encoding.GetBytes(text); ms.Write(barr, 0, barr.Length); using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate)) { using (BinaryWriter bw = new BinaryWriter(ms)) { bw.Write(ms.ToArray()); } } } static void Main(string[] args) { Program p = new Program(); p.writeToFile("Tony Test"); Console.ReadLine(); } 
1
  • what actually happens? Error, empty file? Commented Jul 15, 2010 at 9:26

4 Answers 4

10

Look at this line:

using (BinaryWriter bw = new BinaryWriter(ms)) 

You're writing back to the MemoryStream. You want:

using (BinaryWriter bw = new BinaryWriter(fs)) 

Having said that, this is a pretty nasty way of writing to a file, with all kinds of unnecessary steps. Hopefully this was just experimentation trying to work out why something else wasn't working - but if your real code is actually like this, please give details of what you're trying to do and we can help you tidy it up.

Sign up to request clarification or add additional context in comments.

4 Comments

This is copied from a piece of production code, not written by me, that was failing to write to the file and I was attempting to debug it. Could you just tell me what is nasty about it? It really is supposed to take a memorystream and write the contents (a string) to a file...
This code forces the process to copy all of the contents of the MemoryStream (with theToArray() call). See e.g. stackoverflow.com/questions/230128/… for better methods.
Thanks, so what does the ToArray call copy more then the method provided in your link?
@Tony: Use MemoryStream.WriteTo to do this in a much nicer fashion... and you don't need a BinaryWriter either. The code to populate the memory stream is somewhat wasteful too.
3

You are using the MemoryStream ms for both input and output. Change the line

using (BinaryWriter bw = new BinaryWriter(ms)) 

to

using (BinaryWriter bw = new BinaryWriter(fs)) 

Comments

0

Alternatively:

File.WriteAllText("myfile", "mytext"); 

Comments

0

You are writing to text wtih the hardest way possible. you should use File.WriteAllText (as Adam says) or Append text method. If you want to use a writer with special encoding than you should use StreamWriter, since it works with text data and you can set the Encoding of the file.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.