我有一个程序可以创建一个巨大的字符串,对StringBuilder
来说太大了。我想将它存储在内存中,然后将其保存到用户定义的目录中。
我已经尝试了StreamWriter
,但我需要在创建目录时声明目录,这是有问题的,因为如果用户选择"保存到文本文件"我稍后会获得该目录。
基本上我需要它:
- 创建它的实例(公共和类范围,不能在方法范围内)
- 将字符串添加到实例
- 然后,稍后,每当用户决定时,将其保存到文件中。我知道它将占用大量的RAM,我相信它只会在50-100Mb左右,这不是太糟糕。
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
}
}
`
答案 0 :(得分:1)
这是一个可以帮助您的代码段。我刚刚在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();
}
文件内容为:
This is a test.
This is a second line.
您需要对其进行修改以适合您的程序设计,但基本的想法是使用StreamWriter
将文本写入MemoryStream
,然后将MemoryStream
写入文件采用MemoryStream.CopyTo
方法(需要Stream
)。
小心你如何构建东西 - 如果你关闭StreamWriter
,它也会关闭MemoryStream
(我第一次测试时,StreamWriter
位于using
1}}在MemoryStream
使用块内阻塞,然后尝试访问封闭流时出错。
希望这至少会让你朝着正确的方向前进。
修改强>
您需要在方法中初始化StreamWriter
,而不是字段变量。
这样的事情:
public class ImageProcessor
{
MemoryStream ms = new MemoryStream();
StreamWriter sw;
public Bitmap Rendering(string bmpPath)
{
sw = new StreamWriter(ms, System.Text.Encoding.UTF8);
}
}