C# clear Console last Item and replace new? Console Animation

匿名 (未验证) 提交于 2019-12-03 02:51:02

问题:

The following CSharp Code(just sample):

Console.WriteLine("Searching file in...");  foreach(var dir in DirList) {     Console.WriteLine(dir); }

Prints Output As:

Searching file in...  dir1  dir2  dir3  dir4  .  .  .

Question? How can I get the output as

Searching file in...  dir1  

(then clear dir1 and print dir2 and so on)All next dir name wiil replace the previous dir

回答1:

If your problem is clearing the console then use the method Console.Clear();, if it's not, use this to overwrite the last line;

Console.WriteLine("Searching file in...");         foreach(var dir in DirList)          {            Console.SetCursorPosition(1,0);            Console.WriteLine(dir);          }


回答2:

Use Console.SetCursorPosition to set the cursor on the start of the last line and rewrite it.

Something like:

Console.WriteLine(dir); Console.SetCursorPosition(0, Console.CursorTop - 1);

EDIT:

According to your comment, you could do as follows:

Console.WriteLine("Searching file in..."); foreach (var dir in DirList) {     ClearCurrentConsoleLine();     Console.Write(dir); }

With ClearCurrentConsoleLine defined as:

public static void ClearCurrentConsoleLine() {     int currentLineCursor = Console.CursorTop;     Console.SetCursorPosition(0, Console.CursorTop);     for (int i = 0; i < Console.WindowWidth; i++)         Console.Write(" ");     Console.SetCursorPosition(0, currentLineCursor); }


回答3:

You could print using "\r", that way cursor dont jump a line, and you can rewrite it.

foreach(var dir in DirList)      {        Console.Write("\r{0}%           ",dir);      }

use spaces after number to make sure everything is erased, and use .Write instead of WriteLine because you dont want to add "\n"



回答4:

Just keep track of the current position of the cursor by saving the values of the Console.CursorLeft and Console.CursorTop properties. Then write, reset and repeat. Or rather in this case, reset, write and repeat.

Console.WriteLine("Searching file in...");  // save the current cursor position var cursorLeft = Console.CursorLeft; var cursorTop = Console.CursorTop;  // build a format string to establish the maximum width do display var maxWidth = 60; var fmt = String.Format("{{0,-{0}}}", maxWidth);  foreach (var dir in dirList) {     // restore the cursor position     Console.SetCursorPosition(cursorLeft, cursorTop);      // trim the name if necessary     var name = Path.GetFileName(dir);     if (name.Length > maxWidth)         name = name.Substring(0, maxWidth);      // write the trimmed name     Console.Write(fmt, name);      // do some work } Console.WriteLine(); // end the previous line


回答5:

Although this is a quite old post, I will post my approach. Maybe this would help someone

Console.SetCursorPosition(0, Console.CursorTop); Console.Write(new String(' ', Console.WindowWidth)); Console.SetCursorPosition(0, Console.CursorTop); Console.Write(dir);


回答6:

I think this is what you want ;)

Console.WriteLine("Searching file in...");     foreach(var dir in DirList)      {        Console.Write(\"r" + dir);      }


回答7:

This will do what I think you're asking for:

string s = "\r"; s += new string(' ', Console.CursorLeft); s += "\r"; Console.Write(s);

Essentially the same as @digEmAll suggested, but it uses the actual # of chars instead of Console.WindowWidth



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!