2

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

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

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() ,如果有任何帮助,我将不胜感激!

4

2 回答 2

0

您是否希望完全清除控制台?

Console.Clear();

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

于 2013-02-04T03:57:23.677 回答
0

您可以使用 或 将光标移动到需要的行Console.SetCursorPosition并简单地覆盖该行的Console.Write内容Console.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();
于 2013-02-04T04:34:10.613 回答