输出到文本文件问题

本文关键字:问题 文件 文本 输出 | 更新日期: 2023-09-27 18:07:21

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

Console.Write(position[i] + " ");
for循环下面的

编译没有问题,但是Console.SetOut(sw);表示名称I在当前上下文中不存在。谁能帮助我得到的应用程序输出出现在一个文本文件?

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

输出到文本文件问题

for循环范围内定义的i变量。退出时,此范围变量不可用。

使用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;
 }
顺便说一句,如果没有block,你的代码相当于
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循环之前在更宽的范围内定义它。例如

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

如果您想将控制台输出镜像到文件,那么我建议您使用tracelistener或一些日志记录框架。例如

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