本人在前几天做了一道题如下(在116行中用(int)cki.KeyChar==26解决了C#中在控制台捕捉Ctrl+Z):
解决的方法也是请教了老师,经老师调试过才得出的解决方法.(因在ConsoleKey的枚举中无Ctrl此键)
总结的心得是,单步调试方法确实是有效解决问题的路径.

  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4
  5namespace 用CSharp实现DOS命令Copy_con
  6{
  7    //24、编写一个程序,模拟DOS系统中的COPY CON命令功能。
  8    /**//*copy是复制命令,不多解释。 
  9con 是dos 设备文件的简称。 在dos中把很多外部设备作为文件,称为设备文件。
 10dos中这样规定的:con 控制台(键盘/显示器) aux (或com1)第一个串口 lpt1 第一个并行打印机接口,
 11nul 不存在的设备 
 12    所以,举例说明: 
 13copy con abc.txt 
 14这条命令的意思就是从键盘中把输入的文字复制到文件abc.txt中去,所以输入命令后,在输入字符,结束时按下 
 15ctrl+z.你输入的文字就会保存到abc.txt这个文件里了。 
 16而如果你输入的是 
 17copy abc.txt con 
 18计算机则会把abc.txt中的文字复制到屏幕上,也就是显示出来
 19     */
 20    class DOSCopyCon
 21    {
 22        private string inputCommandtext="";
 23
 24        private string sourceFilename="";
 25
 26        private string targetFilename="";
 27        //有参构造函数实现,实例化对象的同时赋值命令字符串
 28        public DOSCopyCon(string inputCommandText)
 29        {
 30            this.inputCommandtext = inputCommandText;
 31        }
 32        //读写属性InputCommandText实现输入或读取命令字符串
 33        public string InputCommandText
 34        {
 35            get
 36            {
 37                return inputCommandtext;
 38            }
 39            set
 40            {
 41                if (value != "")
 42                {
 43                    this.inputCommandtext = value;
 44                }
 45            }
 46        }
 47        //只读属性SourceFileName
 48        public string SourceFileName
 49        {
 50            get
 51            {
 52                return sourceFilename;
 53            }
 54        }
 55        //只读属性TargetFileName
 56        public string TargetFileName
 57        {
 58            get
 59            {
 60                return targetFilename;
 61            }
 62        }
 63        //有参执行copy con命令方法
 64        public void ExecuteCopyConCommand(string inputCommandText)
 65        {
 66            if (inputCommandText != "")
 67            {
 68                this.inputCommandtext = inputCommandText;
 69                //开始实现Copy命令
 70                DoneCopyCon();
 71            }
 72            else
 73            {
 74                Console.WriteLine("**Copy命令不能为空**");
 75                return;
 76            }
 77        }
 78        //无参执行copy con 方法
 79        public void ExecuteCopyConCommand()
 80        {
 81            if (inputCommandtext == "")
 82            {
 83                Console.WriteLine("**Copy命令不能为空**");
 84                return;
 85            }
 86            //开始实现Copy命令
 87            DoneCopyCon();
 88        }
 89
 90        //实现Copy命令的方法
 91        private void DoneCopyCon()
 92        {
 93            //ConsoleKeyInfo ckis=new ConsoleKeyInfo(Convert.ToChar("\0x001A"),ConsoleKey.Z,false,true,false);
 94            ConsoleKeyInfo cki = new ConsoleKeyInfo();
 95            
 96            String[] strs = inputCommandtext.Split(new char[] { ' ' });
 97            string inputFileText = "";
 98
 99            if (strs.Length > 3 || strs[0] != "copy")//输入命令字符串不合法
100            {
101                Console.WriteLine("您输入的copy命令不正确!!");
102                return;
103            }
104
105            else
106            {
107                if (strs[1] == "con")   //从控制台中接收字符串写入文件中
108                {
109            //********????????????????????????????????????????????????????????????????????***********
110                    //因ConsoleKey枚举中没有Ctrl键的值,但注意可用单步调试的方法来,查看在控制台中输入Ctrl+Z的值是多少
111                    //在单步调试的调试状态下,输入Ctrl+Z得知cki.KeyChar的值是26,于是我们可以利用这一值来进行转换比较即可
112                    Console.WriteLine("开始往文件{0}写入字符串(按Ctrl+Z或End结束并写入):",strs[2]);
113                    while (true)
114                    {
115                        cki = Console.ReadKey();
116                        if (cki.Key == ConsoleKey.End||(int)cki.KeyChar==26)  //只实现了按End建就结束并写入文件
117                        {                               //但Ctrl+Z还没实现
118                            break;
119                        }
120                        inputFileText += cki.KeyChar.ToString();
121                    }
122                    System.IO.StreamWriter sw = new System.IO.StreamWriter(strs[2]);
123                    sw.Write(inputFileText);
124                    sw.Close();
125                    Console.WriteLine("写入文件{0}成功.", strs[2]);
126                    return;
127                }
128             //********????????????????????????????????????????????????????????????????***********
129                else
130                {
131                    if (strs[2] == "con")   //若是读文件命令
132                    {
133                        Console.WriteLine("开始读取文件{0}",strs[1]);
134                        Console.WriteLine("读取文件成功,此文件内容如下:");
135                        System.IO.StreamReader sr = new System.IO.StreamReader(strs[1]);
136                        Console.WriteLine(sr.ReadToEnd());
137                        Console.WriteLine("读取文件已完成.");
138                        sr.Close();
139                        return;
140                    }
141                    //以下操作为复制文件时用到
142                    //else  //开始复制操作
143                    //{
144                    //    this.sourceFilename = strs[1];
145                    //    this.targetFilename = strs[2];
146
147                    //    if (strs[1] == strs[2])   //若同名复制就不管了
148                    //    {
149                    //        Console.WriteLine("同名复制!!");
150                    //        return;
151                    //    }
152                    //    else   //开始复制异名文件
153                    //    {
154                    //        if (System.IO.File.Exists(strs[2]))  //目标文件存在就删除
155                    //        {
156                    //            Console.Write(string.Format("您要改写文件{0}吗?(Yes/NO/All):", strs[2]));
157                    //            string dialogResultStr = Console.ReadLine();
158                    //            if
159                    //            System.IO.File.Delete(strs[2]);
160                    //        }
161                    //        System.IO.File.Copy(strs[1], strs[2]);//开始复制文件
162                    //        Console.WriteLine("复制源文件{0}到目标文件{1}成功!",strs[1], strs[2]);
163                    //    }
164                    //}
165                }
166            }
167        }
168    }
169}
170

转载于:https://www.cnblogs.com/ArisHuang/archive/2008/06/10/1217044.html

C#_解决在控制台中输入Ctrl+Z的问题相关推荐

  1. 在控制台中输入月,日. 计算这是一年的第几天.(Python)

    #在控制台中输入月,日. # 计算这是一年的第几天. # 例如:3月5日 # 累加1月,2月总天数,再累加3月的5天. # 例如:5月10日 # 累加1月,2月,3月,4月总天数,再累加5月的10天. ...

  2. 在FIREBUG控制台中输入 jQuery() 返回 []

    在FIREBUG控制台中输入 jQuery() 返回 [] jQuery.fn = jQuery.prototype = {constructor: jQuery,init: function( se ...

  3. Java初学者作业——编写JAVA程序,在控制台中输入六位员工的姓名,通过随机点名方式,输出当选组长的员工姓名。

    返回本章节 返回作业目录 需求说明: 编写JAVA程序,在控制台中输入六位员工的姓名,通过随机点名方式,输出当选组长的员工姓名. 实现思路: (1)定义字符串类型的数组names,长度为6,用于存储六 ...

  4. getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析...

    2013-07-18 21:35:58 getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析. char是字符型数 ...

  5. java 控制台 移动光标_如何使控制台中光标移动到指定位置?

    Its_forever package interfaces; import java.util.Scanner; public class Test { public static void mai ...

  6. 工厂模式,设计电话卡类,具有属性姓名,具有动作计费,电话卡片分成 联通和移动,要求在控制台中输入联通 就能通过工厂生成一个联通的联通卡的对象,输入移动生成移动卡的对象,然后分别调用各自的计费方式打印出

    package com.Telephone;/*** @Author: 廾匸* @Date: 2020/11/6 21:21* @Description: 电话卡类* @version: 1.01*/ ...

  7. 笨办法学python3 pdf 脚本之家_解决python3输入的坑——input()

    如下所示: a,b,c,d = input() 很简单的代码,如果输入为 1 -1 -2 3 结果会报错,原因在于input函数会将你的输入作为python脚本运行,那么输入就变成了 1-1 -2 3 ...

  8. Java从控制台中读取数据完全攻略

    0 引言 从控制台中读取数据是一个比较常用的功能,在 JDK 5.0 以前的版本中的实现是比较复杂的,需要手工处理系统的输入流.有意思的是,从 JDK 5.0 版本开始,能从控制台中输入数据的方法每增 ...

  9. C++下ctrl+z退出cin输入循环

    ctrl+z 退出输入的循环结构 测试的语言及工具 for循环 while循环 do while循环 进一步探究ctrl+z在变量内部储存为什么 几天后的继续 测试的语言及工具 C++ visual ...

最新文章

  1. [No000077]打造自己的Eclipse
  2. 正则表达式贪婪模式及最短匹配
  3. 如何将视频下载并且转码拼接
  4. anaconda3 2.3.9 下载_多体系如何融合?先做好体系意识的培训!(附4合1体系培训下载)...
  5. python Pandas文件读写
  6. 列表与元组——Python基础语法
  7. 西电计算机学硕毕业要求,关于计算机科学与技术学院2020年12月研究生学位申请工作的通知...
  8. python程序的运行过程_python代码是怎样运行的
  9. asp.net oracle odbc,ADO.NET 连接数据库字符串小结(Oracle、SqlServer、Access、ODBC)
  10. 前端——HTML百度首页制作
  11. 数据库——数据库练习题
  12. 2020apple教育优惠购买策略
  13. 如何删除计算机guest用户,windows xp系统怎么删除Guest用户
  14. 什么是SaaS,PaaS和IaaS? 有例子
  15. 智安网络丨浅谈信息系统终止时如何确保信息资产的安全
  16. 学完python可以从事哪些工作?
  17. python编程培训郑州
  18. Anaconda和pip的区别
  19. java中的轮子是什么意思_后端的轮子(一)
  20. 虚拟主机cpanel面板安装thinktp,更改根目录

热门文章

  1. echarts 三环圆环_echarts实现环形进度图
  2. 浪潮服务器 虚拟光驱,使用IPMI功能远程安装Windows Server 2003操作系统步骤
  3. 最详细的FPN论文笔记
  4. 网络规划设计师考试总结
  5. vue中用watch监听路由信息
  6. 图书馆管理系统——还书和延期操作
  7. 小汤学编程之JavaEE学习day06——LayUI
  8. HDU 4857 逃生 【拓扑排序+反向建图+优先队列】
  9. js实现给数字加三位一逗号间隔的两种方法
  10. linux+jmeter+python基础+抓包拦截