我試着寫,從控制檯中刪除特殊字符功能.. 例如,如果我寫:從控制檯刪除特殊字符 - C#
Console.WriteLine("Hello World");
我打電話與字符功能後「O」時,控制檯會像:
"Hell Wrld"
我想和
Console.SetCursorPosition(i,j);
在控制檯中所有正在運行
但我無法獲得「CursorPosition」的值。
任何想法?
我試着寫,從控制檯中刪除特殊字符功能.. 例如,如果我寫:從控制檯刪除特殊字符 - C#
Console.WriteLine("Hello World");
我打電話與字符功能後「O」時,控制檯會像:
"Hell Wrld"
我想和
Console.SetCursorPosition(i,j);
在控制檯中所有正在運行
但我無法獲得「CursorPosition」的值。
任何想法?
有沒有辦法讓你讀什麼已經被寫入到控制檯。然而,你可以做的一件事是提供你自己的輸出流。您可以製作自己的TextWriter
實現,該實現具有原始輸出流和過濾字符。然後,您可以將控制檯的輸出流設置爲您的新輸出流,然後在任何時候任何人寫入您的程序輸出流時,它會過濾您選擇的字符。
我用下面幾行代碼運行了一些簡單的測試,它似乎工作得很好。讓我知道它是否不包括更復雜的情況。
public class FilteringTextWriter : TextWriter
{
private HashSet<char> invalidChars;
private TextWriter destinationStream;
public FilteringTextWriter(IEnumerable<char> invalidChars, TextWriter destinationStream)
: base()
{
this.invalidChars = new HashSet<char>(invalidChars);
this.destinationStream = destinationStream;
}
public override void Write(char value)
{
if (!invalidChars.Contains(value))
{
destinationStream.Write(value);
}
}
}
在其他地方主要還是地方:
Console.SetOut(new FilteringTextWriter(new[] { 'o' }, Console.Out));
Console.CursorLeft
和Console.CursorTop
是光標位置的「get」方法。
您無法從控制檯緩衝區讀取數據,即無法獲取已寫入控制檯的內容。 (直接在C#中,但可以使用本機Windows API或使用Interop來完成)。
所以,也許你最好換Console類在自己的類,並將其寫入到屏幕前過濾字符串,
public MyConsole
{
// expose the neede methods:
public void WriteLine(string text)
{
Console.WriteLine(text.Replace(...)); // filter out the special chars
}
}
然後用MyConsole
,而不是Console
。
您CAN閱讀已寫入控制檯的內容!
沒有方法可以在.NET中讀取控制檯緩衝區,但是可以調用幾個WinAPI函數來完成工作。
退房GetStdHandle(),GetConsoleScreenBufferInfo()和ReadConsoleOutput()
當然,我的意思是在.NET框架中沒有辦法做到這一點。我知道你可以使用本地API做幾乎任何事情。您可以使用Interop使用本地API。 – JotaBe
真棒..!很酷的想法,謝謝:) – Worrior