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.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();
于 2013-02-04T04:34:10.613 に答える