2012-11-21 263 views
1

我有簡單的命令行應用程序,並且我想存儲在程序啓動之間鍵入的命令。C#控制檯應用程序命令會話歷史記錄

獨自存儲不是問題,我知道該怎麼做,但我該如何恢復它? Console類沒有任何設置歷史記錄的方法,如果我按下應用程序開始時的箭頭它是空的。

從非託管代碼msdn方法對我沒有幫助,很好的答案可以告訴我如何在c#中使用它們來獲得我所需要的。

我的想法是隻用ReadKey來覆蓋箭頭,並以「難」的方式做,但如果有更簡單的方法,我會很高興。

+0

是不是內置功能不夠? http://stackoverflow.com/questions/6973260/why-does-my-console-application-have-command-history – jeroenh

+0

不是,正如你所看到的我想要在程序運行之間存儲它,內置的功能很好,但是當我關閉應用程序,然後再次打開它,我沒有歷史記錄。即使你關閉它並再次打開它,但在linux中看到它有命令,而不是那麼多的Windows控制檯。 – Mateusz

+0

歷史記錄是命令處理器cmd.exe的一項功能。相當於bash。它不會丟失歷史記錄,因爲您不會在程序運行之間關閉它。如果你想讓它在你自己的程序中可用,你將不得不建立自己的。肯定不是不可能與Console.ReadKey() –

回答

1

我會簡單地將命令保存爲XML或存儲在關係數據庫中,在需要時我會將XML反序列化爲存儲爲列表或可能數組的適當對象(如果您有指定數量的命令,例如最後10)。然後按照您提到的覆蓋相應的事件,並通過保持列表中的位置計數器來迭代命令對象列表。

+0

我不會使用數據庫或XML來處理這樣的任務,純文本換行就足夠了。我會讓它簡單地循環訪問字符串數組,而不需要對象。我發現重寫Console.ReadLine()的默認行爲是不可能的,所以這是主要問題。 – Mateusz

0

我知道這是一個老問題,但我也在尋找答案。雖然找不到,所以我構建了InteractivePrompt。它的格式爲NuGet Package,您可以輕鬆擴展GitHub上的代碼。它具有當前會話的歷史記錄,但我計劃實現在會話之間保存命令的功能。

這是一個非常有用的封裝DLL的包,比如SQLite。

相關問題