输出到文本文件问题

时间:2014-06-06 20:54:30

标签: c#

我在写入文本文件时遇到问题。

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);
                }

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] + " ");