gpt4 book ai didi

c# - 使用 C# 获取没有最后一行的控制台缓冲区?

转载 作者:太空狗 更新时间:2023-10-29 19:45:12 24 4
gpt4 key购买 nike

我想要实现的是一个没有有害输出的自编译 c# 文件。我正试图通过 Console.MoveBufferArea 实现这一目标方法,但看起来不起作用。例如。 - 使用 .bat 扩展名保存下面的代码:

// 2>nul||@goto :batch
/*
:batch
@echo off
setlocal

:: find csc.exe
set "frm=%SystemRoot%\Microsoft.NET\Framework\"
for /f "tokens=* delims=" %%v in ('dir /b /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
set netver=%%v
goto :break_loop
)
:break_loop
set csc=%frm%%netver%\csc.exe
:: csc.exe found
%csc% /nologo /out:"%~n0.exe" "%~dpsfnx0"
%~n0.exe
endlocal
exit /b 0
*/
public class Hello
{
public static void Main() {
ClearC();
System.Console.WriteLine("Hello, C# World!");
}

private static void ClearC() {
System.Console.MoveBufferArea(
0,0,
System.Console.BufferWidth,System.Console.BufferHeight-1,
0,0
);
}
}

输出将是:

C:\>//  2>nul  ||
Hello, C# World!

想要摆脱 //2>nul || 。这可能吗?我的逻辑(ClearC 方法)有问题吗?我需要 PInvoke 吗?

最佳答案

如果您想在 C# 中执行此操作,则将 ClearC 函数更改为以下内容似乎可行:

public static void ClearC() {
System.Console.CursorTop = System.Console.CursorTop - 1;
System.Console.Write(new string(' ', System.Console.BufferWidth));
System.Console.CursorTop = System.Console.CursorTop - 1;
}

基本上,将光标向上移动一行(到应包含提示的行),使整行空白,然后向上移动另一行(这将使您移动到命令之间的空白行)。以后的输出将从这里开始。

这样做的明显缺点是,在删除 //2>nul || 之前,您需要等待 C# 代码编译和执行。如果你想让它更快,你需要找到一个基于控制台/批处理文件的解决方案。要记住的另一件事是假设提示是单行。如果它是一个跨越两行的非常长的提示,那么您会变得有些困惑,因此最好清除两行,具体取决于您打算如何使用它。

如果您想全力以赴并开始读取控制台缓冲区以确定提示的长度,那么您可能想看看这个 question .虽然答案中的文章链接已损坏,但代码下载似乎仍然有效。

如果您想了解基于批处理文件的方法,那么您可能想看看这个 question .

关于c# - 使用 C# 获取没有最后一行的控制台缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30948239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com