2014-05-02 173 views
9

我使用Console.ReadLine來讀取用戶的輸入。但是,我想在輸入時在控制檯屏幕上隱藏/排除輸入的文本。例如,當用戶寫入「a」時,它將「a」寫入控制檯,然後我將得到一個值爲「a」的變量。但是,我不希望在控制檯的輸出中寫入「a」。C#控制檯 - 在輸入時隱藏控制檯窗口的輸入

我怎麼能這樣做?

+1

'Console.ReadLine'的設置方式是將輸入直接回顯到控制檯。對於特殊用途的情況(例如,如果你想輸入密碼而不希望別人看到輸入的字母),你必須一個接一個地截取字符(就像@ojblass指出的那樣)並將它們存儲到一個變量中你自己。或者,如果你願意,你可以在控制檯的輸出中顯示一系列'*',或者如果你願意的話,甚至可以用飛猴代替它們。 – OnlineCop

+1

相關:http://stackoverflow.com/q/3404421/945456 –

回答

15

Console.ReadKey(true)隱藏用戶密鑰。我不相信Console.Read()提供這樣的功能。如有必要,您可以一次一個坐在循環讀取鍵中,直到按下輸入鍵。以this link爲例。

+0

我想讀取完整的輸入,而不僅僅是一個鍵。 – user3265040

+5

坐在一個循環中,並閱讀發佈的示例中的按鍵。 – ojblass

19

這是一個簡短的實現。爲理念

System.Console.Write("password: "); 
string password = null; 
while (true) 
{ 
    var key = System.Console.ReadKey(true); 
    if (key.Key == ConsoleKey.Enter) 
     break; 
    password += key.KeyChar; 
} 
+5

可能更適合使用stringbuilder – m4tt1mus

0

THX @ojblass我從dataCore的答案代碼和m4tt1mus建議創造了這個方法。我還加入了對退格鍵的支持。

private static string GetHiddenConsoleInput() 
{ 
    StringBuilder input = new StringBuilder(); 
    while (true) 
    { 
     var key = Console.ReadKey(true); 
     if (key.Key == ConsoleKey.Enter) break; 
     if (key.Key == ConsoleKey.Backspace && input.Length > 0) input.Remove(input.Length - 1, 1); 
     else if (key.Key != ConsoleKey.Backspace) input.Append(key.KeyChar); 
    } 
    return input.ToString(); 
}