【问题标题】:How to clear previous data in console C#?如何在控制台 C# 中清除以前的数据?
【发布时间】:2013-01-18 18:17:00
【问题描述】:

如果有人可以提供帮助,我将不胜感激。

我在控制台中显示堆栈中的所有驱动器:

public void ShowDrives()
    { 
        foreach (FileSystemInfo f in stack)
            Console.WriteLine(f);
    }

Output:
C:\
E:\

现在,当我按下左箭头键时,我调用另一个方法,显示特定驱动器内的目录,并将这些数据写入同一个堆栈

 public void ShowFiles(DirectoryInfo dif)
    {
            stack.Clear();
            foreach (FileSystemInfo f in dif.GetFileSystemInfos())
            {...} //show all files and directories and Write all inside the stack
     }

但是我之前的驱动器输出保留在控制台中,我需要以某种方式将其删除,并显示堆栈的新数据。

Output:
C:\
E:\
C:\file1.doc
C:\folder
 etc...

而我只需要得到

C:\file1.doc
C:\folder
 etc...

不允许使用Console.Clear() 如有任何帮助,我将不胜感激!

【问题讨论】:

  • 如果不允许使用 clear 方法,您是否真的在寻找一种在屏幕上移动光标的方法?
  • 是的,我可以移动光标位置,但我需要删除以前的输出
  • @GyuzalRakhmayeva 我已转发我的评论作为答案。

标签: c# stack console-application


【解决方案1】:

您可以使用Console.SetCursorPosition 将光标移动到需要的行,然后使用Console.WriteConsole.WriteLine 覆盖该行的内容。

但是你应该记住,如果前一个输出的行数更多,或者前一个输出的某些行比后一个输出的相应行长,你可能会留下前一个输出......

我唯一可以建议的是记住所有这些长度并用空格覆盖这些垃圾:

string oldoutput = "123";
Console.Write(oldoutput);
Console.ReadLine();

string newoutput = "!";
Console.SetCursorPosition(0, Console.CursorTop - 1);
Console.Write(newoutput);

int delta = oldoutput.Length - newoutput.Length;
if (delta > 0)
{
    for (int i = 0; i < delta; i++)
        Console.Write(" ");
}

Console.ReadLine();

【讨论】:

    【解决方案2】:

    您要彻底清除控制台吗?

    Console.Clear();
    

    ...或者您只想覆盖某些行?

    【讨论】:

    • 某些行,我的意思是我需要显示堆栈的新内容,我不允许使用 Console.Clear();
    猜你喜欢
    • 2021-10-15
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2011-02-28
    相关资源
    最近更新 更多