使用控制台应用程序时,会存储在Console.ReadLine()
输入的所有内容的历史记录。在控制台提示输入内容时,按向上/向下光标将滚动浏览此历史记录(按F7可查看整个历史记录)。
使用C#,是否可以禁用此行为或清除已输入的内容的历史记录?
为了澄清,Console.Clear()
不清除历史记录,只清除屏幕缓冲区。我想清除命令历史记录。
编辑:尝试了几种建议的方法,以及我自己设计的一些方法,最好的方法是ho1建议的方法。它并不理想,因为它会带来另一个控制台窗口,但它确实清除了历史记录。
答案 0 :(得分:4)
How can I configure the command line history, DOSKEY?上的这篇文章可以提供帮助吗?
在过去的DOS时代,有一个实用程序DOSKEY.EXE,它允许用户循环浏览以前的命令。在NT中,默认情况下启用此功能,您可以循环使用旧命令,但DOSKEY具有其他功能。
要清除当前命令行历史记录使用命令:
doskey /reinstall
您还可以选择告诉它与/ listsize参数
保持多少旧命令doskey /reinstall /listsize=50
将保留50个旧命令。
请告诉我它是否有效以及您如何使用它:)
答案 1 :(得分:1)
编辑:删除了错误的答案(我对你想做的事感到困惑)并添加了另一个(希望)更好的答案。
可以通过使用FreeConsole释放当前控制台,然后使用AllocConsole分配新控制台来执行此操作。我认为它不会保留命令行历史记录。
一般情况下,如果您想使用.Net Framework不支持的控制台进行操作,则可以在此MSDN页面查看:Console Functions
答案 2 :(得分:1)
看看SetConsoleHistoryInfo。根据文档,它只适用于Vista及以上,所以我不确定它是否会对你有所帮助。
答案 3 :(得分:1)
此代码可供我清除命令历史记录。有限的测试,不保证便携性。
public static partial class ConsoleEx
{
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetConsoleHistoryInfo(CONSOLE_HISTORY_INFO ConsoleHistoryInfo);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool GetConsoleHistoryInfo(CONSOLE_HISTORY_INFO ConsoleHistoryInfo);
[StructLayout(LayoutKind.Sequential)]
private class CONSOLE_HISTORY_INFO
{
public uint cbSize;
public uint BufferSize;
public uint BufferCount;
public uint TrimDuplicates;
}
public static void ClearConsoleHistory()
{
var chi = new CONSOLE_HISTORY_INFO();
chi.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(CONSOLE_HISTORY_INFO));
if (!GetConsoleHistoryInfo(chi))
{
return;
}
var originalBufferSize = chi.BufferSize;
chi.BufferSize = 0;
if (!SetConsoleHistoryInfo(chi))
{
return;
}
chi.BufferSize = originalBufferSize;
if (!SetConsoleHistoryInfo(chi))
{
return;
}
}
}
答案 4 :(得分:0)
似乎根据MSN(http://msdn.microsoft.com/en-ie/library/system.console_members.aspx)方法console.clear()
“清除控制台缓冲区..”
答案 5 :(得分:0)
您可以尝试使用该属性
Console.BufferHeight : "This property defines the number of rows (or lines) stored in the buffer that is accessed by a console mode window"