我在写入文本文件时遇到问题。
Console.Write(position[i] + " ");
在for循环下的编译没有问题,但在Console.SetOut(sw)下的那个; 说我在当前的背景下并不存在这个名字。任何人都可以帮助我将应用程序输出显示在文本文件中吗?
static void solve(int k)
{
if (k == N)
{
Console.Write("Solution: ");
for (int i = 0; i < N; i++)
Console.Write(position[i] + " ");
Console.WriteLine("Hello World");
FileStream fs = new FileStream("Test.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
Console.SetOut(sw);
Console.WriteLine(position[i] + " ");
sw.Close();
sum += 1;
}
else
{
for (int i = 0; i < N; i++) // Generate ALL combinations
{
if (isSafe(k, i))
{
position[k] = i;
solve(k + 1);
}
答案 0 :(得分:2)
您在i
循环范围内定义的for
变量。当您退出此范围时,变量不可用。
使用block在同一范围内执行多个运算符:
for (int i = 0; i < N; i++)
{
Console.Write(position[i] + " ");
Console.WriteLine("Hello World");
FileStream fs = new FileStream("Test.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
Console.SetOut(sw);
Console.WriteLine(position[i] + " ");
sw.Close();
sum += 1;
}
BTW没有阻止你的代码相当于
for (int i = 0; i < N; i++)
{
// i is available only withing this block
Console.Write(position[i] + " ");
}
// here i is not available
此外,我建议将using
语句与一次性对象(如流)一起使用。您可以在此处使用相同的流,因此在for
循环之前在更广泛的范围内定义它。 E.g。
using(FileStream stream = new FileStream("Test.txt", FileMode.Create))
using(StreamWriter writer = new StreamWriter(stream))
{
TextWriter standardOutput = Console.Out;
for (int i = 0; i < N; i++)
{
Console.SetOut(standardOutput);
Console.WriteLine(position[i] + " ");
Console.SetOut(writer);
Console.WriteLine(position[i] + " ");
}
sum++; // instead of sum += 1
} // stream will be closed automatically
如果要将控制台输出镜像到文件,那么我建议您使用TraceListeners或一些日志框架。 E.g。
Trace.Listeners.Clear();
Trace.Listeners.Add(new ConsoleTraceListener());
Trace.Listeners.Add(new TextWriterTraceListener("Test.txt"));
Trace.AutoFlush = true;
for (int i = 0; i < N; i++)
Trace.WriteLine(position[i] + " ");