C#控制台程序的参数解析类库 CommandLine简单使用说明

前言

C#开发的控制台程序,默认接收string[] args参数。如果有多个参数需要输入时,可以按照顺序依次输入;但如果有些参数不是必选的,或者有些参数中间需要有空格比如时间“2016-05-18 24:35:00”,处理起来就比较麻烦了。一些常用的命令行工具都会提供指定参数的方式,比如:curl

C:\Users\Administrator>curl --help
Usage: curl [options...] <url>
Options: (H) means HTTP/HTTPS only, (F) means FTP only
--anyauth Pick "any" authentication method (H)
-a/--append Append to target file when uploading (F)
--basic Use HTTP Basic Authentication (H)
--cacert <file> CA certificate to verify peer against (SSL)
--capath <directory> CA directory to verify peer against (SSL)
-E/--cert <cert[:passwd]> Client certificate file and password (SSL)

这里要介绍的 CommandLine就是帮助我们轻易完成参数接收和帮助输出的开源类库,同时它可以把接收到的参数转换成对象,方便程序的处理。

教程

  1. 新建控制台项目,安装CommandLine。

    可以下载、编译、引用CommandLine.dll,也可以使用nuget安装 Install-Package CommandLineParser

  2. 新建参数说明类 Options 

首先,添加命名空间  

using CommandLine;
using CommandLine.Text;

然后,定义Options 类

 1   class Options
2 {
3 [Option('r', "read", MetaValue = "FILE", Required = true, HelpText = "输入数据文件")]
4 public string InputFile { get; set; }
5
6 [Option('w', "write", MetaValue = "FILE", Required = false, HelpText = "输出数据文件")]
7 public string OutputFile { get; set; }
8
9
10 [Option('s', "start-time", MetaValue = "STARTTIME", Required = true, HelpText = "开始时间")]
11 public DateTime StartTime { get; set; }
12
13 [Option('e', "end-time", MetaValue = "ENDTIME", Required = true, HelpText = "结束时间")]
14 public DateTime EndTime { get; set; }
15
16
17 [HelpOption]
18 public string GetUsage()
19 {
20 return HelpText.AutoBuild(this, current => HelpText.DefaultParsingErrorsHandler(this, current));
21 }
22
23 }

  3. 修改控制台主程序 Program的Main函数  

 1   //输出信息时的头信息
2 private static readonly HeadingInfo HeadingInfo = new HeadingInfo("演示程序", "V1.8");
3
4 static void Main(string[] args)
5 {
6 //这种输出会在前面添加"演示程序"几个字
7 HeadingInfo.WriteError("包含头信息的错误数据");
8 HeadingInfo.WriteMessage("包含头信息的消息数据");
9
10 Console.WriteLine("不包含头信息的错误数据");
11 Console.WriteLine("不包含头信息的消息数据");
12
13 var options = new Options();
14 if (CommandLine.Parser.Default.ParseArguments(args, options))
15 {
16 Console.WriteLine("Input File:" + options.InputFile);
17 Console.WriteLine("Output File:" + options.OutputFile);
18
19 Console.WriteLine("开始时间:" + options.StartTime.ToString("yyyy年MM月dd日 HH点mm分"));
20 Console.WriteLine("结束时间:" + options.EndTime.ToString("yyyy年MM月dd日 HH点mm分"));
21 Console.Read();
22 }
23 //else
24 //{
25 // Console.WriteLine(options.GetUsage());
26 // Console.Read();
27 //}
28
29 Console.Read();
30 }

3. 测试控制台程序

不输入任何参数,输出了参数的说明信息,如下图:

输入参数,如下图:

时间和字符串类型的字段都获取到了值。 

 
分类: C#

控制台程序的参数解析类库 CommandLine的更多相关文章

  1. C#控制台程序的参数解析类库 CommandLine简单使用说明

    前言 C#开发的控制台程序,默认接收string[] args参数.如果有多个参数需要输入时,可以按照顺序依次输入:但如果有些参数不是必选的,或者有些参数中间需要有空格比如时间“2016-05-18 ...

  2. C++第四十三篇 -- VS2017创建控制台程序勾选MFC类库

    用VS2017创建EXE带MFC类库方法 1. File --> New --> Project 2. Windows桌面向导 3. 勾选MFC类库 4. 创建成功 如果项目编译出错 1. ...

  3. 使用getopt函数对windows命令行程序进行参数解析

    getopt()是libc的标准函数,很多语言中都能找到它的移植版本. // -b -p "c:\input" -o "e:\test\output" bool ...

  4. Visual 中控制台程序如何使用MFC类库

    unresolved external symbol __beginthreadex错误的解决Win32 Consle Application使用MFC的一些类如CString时编译时相信会很经常遇到 ...

  5. .net控制台程序Program args参数解析

    一直很有疑问在控制台程序的Main函数中为什么会有个string[] args的参数,又没有什么用. static void Main(string[] args) { } 这几天需要将一个控制台程序 ...

  6. VisualStudioCode中用dotnet命令创建多个ASP.NET Core 项目、类库、控制台程序,并添加应用间的引用

    一.准备工作 首先安装VisualStudioCode并且可以使用. 1.首先新创建空的MyApps文件夹,作为项目主目录,下面将在这个文件夹中创建多个web应用程序.类型.控制台程序等. 2.打开V ...

  7. C#控制台程序入口函数 Main(string[] args) 参数详解

    学习C#编程最常见的示例程序是在控制台应用程序中输出Hello World! using System; namespace DemoMainArgs { class Program { static ...

  8. 【C#基础知识】C#控制台程序入口函数 Main(string[] args) 参数详解

    测试环境vs2019+.net5.0 请看 :https://cloud.tencent.com/developer/article/1507934 本测试环境vs2022+.net6.0 +wind ...

  9. 【半小时大话.net依赖注入】(一)理论基础+实战控制台程序实现AutoFac注入

    系列目录 第一章|理论基础+实战控制台程序实现AutoFac注入 第二章|AutoFac的常见使用套路 第三章|实战Asp.Net Framework Web程序实现AutoFac注入 第四章|实战A ...

随机推荐

  1. BZOJ 1499 NOI2005 瑰丽华尔兹 单调队列

    题目大意:给定一个m*n的地图,一些点有障碍物,钢琴初始在一个点,每一个时间段能够选择向给定的方向移动一段距离,求最长路径长 朴素DP的话,我们有T个时间段,每一个时间段有m*n个点,n个时间,一定会 ...

  2. javascript每日一练(十)——运动二:缓冲运动

    一.缓冲运动 实现原理:(目标距离-当前距离) / 基数 = 速度(运动距离越大速度越小,运动距离和速度成反比) (500 - oDiv.offsetLeft) / 7 = iSpeed; 需要注意: ...

  3. 我的Python成长之路---第一天---Python基础(作业1:登录验证)---2015年12月26日(雾霾)

    作业一:编写登录接口 输入用户名密码 认证成功系那是欢迎信息 输错三次后锁定 思路: 1.参考模型,这个作业我参考了linux的登录认证流程以及结合网上银行支付宝等锁定规则 1)认证流程参考的是Lin ...

  4. 从 Qt 的 delete 说开来

    原地址:http://blog.csdn.net/dbzhang800/article/details/6300025 在C++中学习过程中,我们都知道: delete 和 new 必须 配对使用(一 ...

  5. CSS+DIV入门第一天基础视频 CSS选择器层叠性和继承性

    大家好,我是小强老师, 现在网上的CSS+DIV视频,要么讲的太深,要么太浅,很多初学的同学们总是遇到困难,今天小强老师专门给大家准备了css课程的视频.带你从零基础学习CSS+DIV一直到能独立完成 ...

  6. 已知一指针p,你可以确定该指针是否指向一个有效的对象吗?如果可以,如何确定?如果不可以,请说明原因。

    这个问题我的思路是:首先用*p将其值输出来,如果编译器报错,证明p指向一个无效的对象,要么p=0要么p未进行初始化,此时可以用if(p == NULL)进行判断即可,不知道大家是否有好的思路噻...

  7. ffmpeg h265

    最新版本号的ffmpeg 支持 libh265,可是还是0基础測试阶段 在linux 上安装ffmpeg 支持h265编码器依照下面步骤: Anyhow here are the simple ste ...

  8. lsh341999的资源

    懒得下载了,仔细研究: http://download.csdn.net/user/lsh341999/uploads/2

  9. 无限层级且乱序的树形结构数据的整理,利用HashMap降低遍历次数

    我们在展示一个机构树的时候,经常会遇到这种一个问题,查询数据的时候,是从下往上查的,但展示数据的时候,又要从下往上展示. 这时候就要把查询到的数据进行整理从而得到我们想要的结构. 举个样例. ID P ...

  10. 【模式识别】Boosting

    Boosting简单介绍 分类中通常使用将多个弱分类器组合成强分类器进行分类的方法,统称为集成分类方法(Ensemble Method).比較简单的如在Boosting之前出现Bagging的方法,首 ...