我正在使用Streamwriter方法单击按钮来运行测试,但在测试完成后我想再次运行它并将结果记录在同一文本文件中。
即使先前的测试已经完成,我总是收到一个错误,即文件仍在另一个进程中。我已经尝试过使用.Close(),然后我得到一个"不能写给封闭的文本作者"错误信息。
StreamWriter ResultsFile = new StreamWriter(FileName, true);
public void ToFile()
{
ResultsFile.AutoFlush = true;
Console.SetOut(ResultsFile);
Console.WriteLine("Regression Test Performed at {0}", thisDate);
Console.WriteLine("-----");
}
[Test]
public void NewTextFile()
{
ToFile();
const int requiredNumber = 5;
for (var i = 0; i < requiredNumber; i++)
{
Console.WriteLine("New ID assigned to ABC");
Console.WriteLine("-----");
}
}
答案 0 :(得分:2)
您不应该像这样重用StreamWriter
,请尝试以下方法。
public void ToFile(StreamWriter sw)
{
sw.AutoFlush = true;
Console.SetOut(sw);
Console.WriteLine("Regression Test Performed at {0}", thisDate);
Console.WriteLine("-----");
}
[Test]
public void NewTextFile()
{
using (var sw = new StreamWriter(FileName, true))
{
ToFile(sw);
const int requiredNumber = 5;
for (var i = 0; i < requiredNumber; i++)
{
Console.WriteLine("New ID assigned to ABC");
Console.WriteLine("-----");
}
}
}
可以找到using
的解释here。我还建议你阅读IDisposable
interface。
请注意,在退出using
语句后,调用Console.WriteLine
将导致ObjectDisposedException
,因为您将尝试写入已处理的流。为了防止出现这种情况,您可以在输入Console.Out
语句之前将using
的返回值缓存到本地变量中,退出using语句后,您可以通过再次调用SetOut
来缓存状态原始流的价值,即:
var original = Console.Out;
using (var sw = new StreamWriter(FileName, true))
{
// ...
}
Console.SetOut(original);