如何在控制台C#中清除以前的数据?

时间:2013-02-04 03:55:34

标签: c# stack console-application

如果有人可以提供帮助,我会很感激。

我在控制台中显示Stack内的所有驱动器:

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() 我会感激任何帮助!

2 个答案:

答案 0 :(得分:0)

您是否希望彻底清除控制台?

Console.Clear();

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

答案 1 :(得分:0)

您可以将光标移动到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();