Question

I have a program that creates a huge string, too large for StringBuilder to handle. I want to store it in memory, then, at a later date, save it to a user defined directory. I have tried a StreamWriter but I need to declare the directory as I create it and that is problem because I get the directory later on, if the user selects the "Save to text file".

Basically I need it to:

-Create instance of whatever it is (public and in a class scope, can not be in a method scope)

-Add a string to instance

-Then, later on, whenever the user decides, save that to a file. I am aware it will take up a large amount of RAM and I believe it will only be around 50-100Mb, which isn't too bad.

public class ImageProcessor
{
    MemoryStream ms = new MemoryStream();
    StreamWriter sw;
    public Bitmap Rendering(string bmpPath)
    {
        sw = new StreamWriter(ms, System.Text.Encoding.UTF8);
        using (ms)
                  sw.Write(Convert.ToString(ArGBformat)); //Error is here
    }
}

`

Was it helpful?

Solution

Here's a code snippet that may help you. I just tested it in VS 2012:

using (MemoryStream ms = new MemoryStream)
{

    StreamWriter sw = new StreamWriter(ms, System.Text.Encoding.UTF8)
    sw.WriteLine("This is a test.");
    sw.WriteLine("This is a second line.");
    sw.Flush();

    using (FileStream fs = new FileStream("Test.txt", FileMode.Create))
    {
        ms.CopyTo(fs);
    }

    sw.Close();
}

The file contents are:

This is a test.
This is a second line.

You'll want to modify this to fit your program's design, but the basic idea is using a StreamWriter to write the text to the MemoryStream, and then writing the MemoryStream to the file with the MemoryStream.CopyTo method (which takes a Stream).

Be careful with how you construct things - if you close the StreamWriter it will close the MemoryStream as well (the first time I tested this I had the StreamWriter in a using block inside the MemoryStream using block, and then got an error trying to access a closed stream).

Hopefully this will at least get you going in the right direction.

EDIT

You'll need to initialize the StreamWriter in a method, not as a field variable.

Something like this:

public class ImageProcessor
{

    MemoryStream ms = new MemoryStream();
    StreamWriter sw;

    public Bitmap Rendering(string bmpPath)
    {

        sw = new StreamWriter(ms, System.Text.Encoding.UTF8);
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top