C#console应用程序命令会话历史记录

时间:2012-11-21 09:51:45

标签: c# command-line-interface

我有简单的命令行应用程序,我想存储在程序启动之间键入的命令。

单独存储不是问题,我知道该怎么做,但我怎么能恢复呢? Console类没有任何设置历史记录的方法,如果我在应用程序启动时向上按箭头它是空的。

来自msdn的非托管代码的方法对我没有帮助,好的答案可以告诉我如何在c#中使用它们来获得我需要的东西。

我的想法是仅使用ReadKey覆盖箭头并以“硬”方式执行,但如果有更简单的方法我会很高兴。

3 个答案:

答案 0 :(得分:1)

我只是将命令保存为XML或在关系数据库中,需要时我会将XML反序列化为存储为列表或可能是数组的相应对象(如果您有定义数量的命令,例如最后一个10)。然后如上所述覆盖相应的事件,并通过保留计数器在列表中的位置来迭代命令对象列表。

答案 1 :(得分:1)

我知道这是一个老问题,但我也在寻找答案。虽然找不到,所以我构建了InteractivePrompt。它可以NuGet Package使用,您可以轻松扩展GitHub上的代码。它具有当前会话的历史记录,但我计划实现在会话之间保存命令的功能。

它是一个非常有用的程序包,用于包装DLL,例如SQLite。

答案 2 :(得分:0)

如果有人寻找类似的东西,我最终使用了PowerShell和一组脚本,但我设法设置了powershell历史记录:

https://software.intel.com/en-us/blogs/2014/06/17/giving-powershell-a-persistent-history-of-commands

$HistoryFilePath = Join-Path ([Environment]::GetFolderPath('UserProfile')) .ps_history
Register-EngineEvent PowerShell.Exiting -Action { Get-History | Export-Clixml $HistoryFilePath } | out-null
if (Test-path $HistoryFilePath) { Import-Clixml $HistoryFilePath | Add-History }
# if you don't already have this configured...
Set-PSReadlineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadlineKeyHandler -Key DownArrow -Function HistorySearchForward

将该代码保存到文件:C:\ Users \\ Documents \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1