模擬 DOS copy con 命令時,需從控制台讀取輸入直到用戶按 Ctrl+Z(EOF 標記)。但 ConsoleKey 枚舉中無 Ctrl 鍵值,直接判斷極其困難。
利用 單步調試 觀察 ConsoleKeyInfo.KeyChar 值:
KeyChar 的整數值為 26(ASCII SUB 字符)ConsoleKeyInfo cki;
Console.WriteLine("開始往文件 {0} 寫入字符串 (按 Ctrl+Z 或 End 結束):", fileName);
while (true)
{
cki = Console.ReadKey();
// 核心判斷:KeyChar == 26 即 Ctrl+Z
if (cki.Key == ConsoleKey.End || (int)cki.KeyChar == 26)
{
break;
}
inputText += cki.KeyChar.ToString();
}
// 寫入文件
using (StreamWriter sw = new StreamWriter(fileName))
{
sw.Write(inputText);
}
Console.WriteLine("寫入文件 {0} 成功.", fileName);
public class DOSCopyCon
{
private string inputCommandText;
public void ExecuteCopyConCommand(string cmd)
{
// 解析命令:copy con filename
string[] parts = cmd.Split(' ');
if (parts[0] != "copy" || parts.Length != 3) return;
if (parts[1] == "con") // 控制台 -> 文件
WriteFromConsole(parts[2]);
else if (parts[2] == "con") // 文件 -> 控制台
ReadToConsole(parts[1]);
}
private void WriteFromConsole(string fileName) { /* 上述核心邏輯 */ }
private void ReadToConsole(string fileName) { /* StreamReader 讀取顯示 */ }
}
單步調試是解決此類「文檔未明確說明」問題的最有效路徑。 當 API 行為不確定時,在斷點處觀察實際運行值,往往能獲得文檔無法提供的關鍵信息。