С# clear Консоль последний элемент и заменить новый? Консольная анимация
Следующий код CSharp (только образец):
Console.WriteLine("Searching file in...");
foreach(var dir in DirList)
{
Console.WriteLine(dir);
}
Распечатывает вывод как:
Searching file in...
dir1
dir2
dir3
dir4
.
.
.
Вопрос
Как я могу получить результат как
Searching file in...
dir1
(затем очистить dir1 и print dir2 и т.д.). Все следующие имена dir заменят предыдущий каталог
Ответы
Ответ 1
Если ваша проблема устраняет консоль, то используйте метод Console.Clear();
, если это не так, используйте это, чтобы перезаписать последнюю строку;
Console.WriteLine("Searching file in...");
foreach(var dir in DirList)
{
Console.SetCursorPosition(1,0);
Console.WriteLine(dir);
}
Ответ 2
Используйте Console.SetCursorPosition
, чтобы установить курсор в начале последней строки и переписать его.
Что-то вроде:
Console.WriteLine(dir);
Console.SetCursorPosition(0, Console.CursorTop - 1);
EDIT:
Согласно вашему комментарию, вы можете сделать следующее:
Console.WriteLine("Searching file in...");
foreach (var dir in DirList)
{
ClearCurrentConsoleLine();
Console.Write(dir);
}
С ClearCurrentConsoleLine
определяется как:
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
Вы можете печатать с помощью "\ r", таким образом, курсор не прыгает в линию, и вы можете переписать его.
foreach(var dir in DirList)
{
Console.Write("\r{0}% ",dir);
}
используйте пробелы после номера, чтобы убедиться, что все стирается, и используйте .Write вместо WriteLine
потому что вы не хотите добавлять "\n"
Ответ 4
Просто отслеживайте текущую позицию курсора, сохраняя значения свойств Console.CursorLeft
и Console.CursorTop
. Затем напишите, reset и повторите. Вернее, в этом случае reset, напишите и повторите.
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
Хотя это довольно старый пост, я отправлю свой подход. Возможно, это поможет кому-то
Console.SetCursorPosition(0, Console.CursorTop);
Console.Write(new String(' ', Console.WindowWidth));
Console.SetCursorPosition(0, Console.CursorTop);
Console.Write(dir);
Ответ 6
Я думаю, что это то, что вы хотите;)
Console.WriteLine("Searching file in...");
foreach(var dir in DirList)
{
Console.Write(\"r" + dir);
}
Ответ 7
Это сделает то, о чем я думаю, что вы просите:
string s = "\r";
s += new string(' ', Console.CursorLeft);
s += "\r";
Console.Write(s);
По существу то же, что и @digEmAll, но он использует фактическое # символов вместо Console.WindowWidth