首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 控制台應用完美捕捉 Ctrl+Z 結束輸入技巧

     編輯:關於C語言

問題背景

模擬 DOS copy con 命令時,需從控制台讀取輸入直到用戶按 Ctrl+Z(EOF 標記)。但 ConsoleKey 枚舉中無 Ctrl 鍵值,直接判斷極其困難。

核心解決方案

利用 單步調試 觀察 ConsoleKeyInfo.KeyChar 值:

  • 按 Ctrl+Z 時,KeyChar 的整數值為 26(ASCII SUB 字符)
  • 結合 End 鍵作為備選退出方式

關鍵代碼實現

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);

完整模擬 copy con 程序結構

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 行為不確定時,在斷點處觀察實際運行值,往往能獲得文檔無法提供的關鍵信息。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved