如何将程序打印的所有内容输出到文件

本文关键字:输出 文件 程序 打印 | 更新日期: 2023-09-27 17:57:07

问题是,我制作了一个代码来生成巨大的恒星金字塔。现在我想将控制台中写入的所有内容输入到文本文件中。谢谢。

我当前的代码。

using System;
namespace Pyramidi
{
class Ohjelma
{
    static void Main()
    {
        int maxHeight = 0;
        do
        {
            Console.Write("Anna korkeus: ");
            maxHeight = Convert.ToInt32(Console.ReadLine());
            if (maxHeight > 0)
            {
                break;
            }
            else
            {
                continue;
            }
        }
        while (true);
        for (int height = 0; height < maxHeight; height++)
        {
            for (int i = 0; i < (maxHeight - height - 1); i++)
            {
                Console.Write(" ");
            }
            for (int i = 1; i <= (height * 2 + 1); i++)
            {
                Console.Write("*");
            }
            Console.WriteLine();
        }
        Console.ReadLine();
    }
}

}

如何将程序打印的所有内容输出到文件

最简单的方法,根本不需要更改程序,是在运行时将程序的输出重定向到文件:

MyProject.exe > file.txt

">"是一个"重定向运算符",就像在许多Unix shell中一样。

如果您使用的是 Windows,则可以在此处阅读有关输出重定向运算符和其他此类运算符的更多信息。如果您使用的是 Unix shell,请使用 shell 的重定向运算符(例如,这是 Bash 手册的建议)。

John的回答是最快和最简单的,但StreamWriter也是一个解决方案。这是您需要写入文件时经常使用的东西。

我建议阅读有关StreamWriter的信息。这允许您将输出到文件。

您只需要在 StreamWriter 中添加一个对象,并将 Console.WriteLines 替换为 StreamWriter 变量名称。

using (StreamWriter sw = new StreamWriter("fileName.txt"))
{
    for (int height = 0; height < maxHeight; height++)
    {                   
        for (int i = 0; i < (maxHeight - height - 1); i++)
        {
            sw.Write(" ");
        }
        for (int i = 1; i <= (height * 2 + 1); i++)
        {
            sw.Write("*");
        }
        sw.WriteLine();
    }
    sw.Flush();
}

这是使用Console.SetOut方法的另一种解决方案:

using (var writer = new StreamWriter("filepath"))
{
   Console.SetOut(writer);
   do
   {
       Console.Write("Anna korkeus: ");
       maxHeight = Convert.ToInt32(Console.ReadLine());
       if (maxHeight > 0)  break;
       else continue;
  }
  while (true);
  for (int height = 0; height < maxHeight; height++)
  {
       for (int i = 0; i < (maxHeight - height - 1); i++)
       {
           Console.Write(" ");
       }
       for (int i = 1; i <= (height * 2 + 1); i++)
       {
            Console.Write("*");
       }
       Console.WriteLine();
  }
  writer.Flush();
}

Console.SetOut更改Console的输出流。因此,当您使用Console.Write时,它会写入该流而不是Console。然后调用Flush方法是写入基础流中的所有数据并清除缓冲区。

使用 IO 直接写入文件,而不是写入控制台

using System;
using System.IO;
class Test
{
    public static void Main()
    {
        string path = @"c:'temp'MyTest.txt";
        if (!File.Exists(path))
        {
            // Create a file to write to. 
            using (StreamWriter sw = File.CreateText(path))
            {
                sw.WriteLine("Hello");
                sw.WriteLine("And");
                sw.WriteLine("Welcome");
            }
        }
        // Open the file to read from. 
        using (StreamReader sr = File.OpenText(path))
        {
            string s = "";
            while ((s = sr.ReadLine()) != null)
            {
                Console.WriteLine(s);
            }
        }
    }
}

有关更多信息,请访问此 http://msdn.microsoft.com/en-us/library/system.io.file.aspx