Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法理解命令行参数。_C#_Visual Studio 2015_Command Line Arguments - Fatal编程技术网

C# 无法理解命令行参数。

C# 无法理解命令行参数。,c#,visual-studio-2015,command-line-arguments,C#,Visual Studio 2015,Command Line Arguments,我最近开始学习c#,在阅读有关filesystemwatcher类的文章时,被命令行参数弄糊涂了 从这里开始: 我复制了c#,当我阅读代码时感到困惑,因为它说如果参数不等于2,基本上不会继续。我以为只有一个参数,目录路径?当我打印args[0]和args[1]时,它打印了watcher.exe和目录,但是我认为目录是watcher.exe的参数,而不是watcher.exe本身是参数?当我查看这个示例()时,它没有显示打印参数时打印的cmdline2,如果有人知道原因,那就太好了 另外,作为一个

我最近开始学习c#,在阅读有关filesystemwatcher类的文章时,被命令行参数弄糊涂了

从这里开始:

我复制了c#,当我阅读代码时感到困惑,因为它说如果参数不等于2,基本上不会继续。我以为只有一个参数,目录路径?当我打印args[0]和args[1]时,它打印了watcher.exe和目录,但是我认为目录是watcher.exe的参数,而不是watcher.exe本身是参数?当我查看这个示例()时,它没有显示打印参数时打印的cmdline2,如果有人知道原因,那就太好了


另外,作为一个附带问题,我确实尝试编写了导致应用程序崩溃的eline args[2]。我想我会在VS 2015中测试调试器,但当我需要将参数传递给应用程序时,我找不到如何调试代码?我看到的只是一个启动按钮,没有参数选项

之所以会发生这种情况,是因为
args[]
参数数组是以一种特殊的方式构造的,这与传统无关。(我相信这是从Unix C中的
main()
函数开始的传统。)每个人都熟悉它,所以每个人都认为它是正常的,但是如果您是第一次看到这一点,您感到困惑是可以理解的

以下是
args[]
的格式:

args[0] = the pathname of the executable file from which the current process started.
args[1] = the first argument passed to the program.
args[2] = the second argument passed to the program.
and so on.
因此,
args
的长度将始终大于或等于1,因为当前进程总是从一个可执行文件开始的

当然,这会变得很棘手,因为如果您想确保您的程序只传递了1个参数,那么必须执行
if(args.Length==2)
。这就是你困惑的根源

不幸的是,人们认为这种事情是“正常”的,他们甚至懒得记录正在发生的巫术。

修正案 更糟糕的是,微软正试图用C#来“纠正”这种不幸的情况,但它们并不一致:

在“Main()和命令行参数(C#编程指南)”()中,他们说:

不像C和C++,程序的名称不被当作第一个命令行参数。

但是在System.Environment.GetCommandLineArgs()的文档中,他们说:

第一个元素是可执行文件名,以下零个或多个元素包含其余的命令行参数

(请记住,当我们说“第一个元素”时,我们指的是索引为零的元素。)

因此,索引0处的参数可能是也可能不是可执行文件;这取决于您手中的参数数组是传递给
Main()
函数的参数数组,还是通过调用
System.Environment.GetCommandLineArgs()
获得的参数数组


很好?我知道,请告诉我。

您的第一个参数是可执行文件的路径。->c://…/watcher.exe。第二个是要监视的目录


打印args[2]时它会崩溃,因为没有第三个参数。如果您想在VS2015中添加一个,可以单击解决方案->属性->调试。您可以在这里的“命令行参数”下设置命令行参数。您还应该能够通过单击一行并添加断点进行调试。

谢谢您的帮助,刚才找到的也回答了我关于第二个示例的问题。。。这是因为第一个是命令行参数,第二个不是。再次感谢。这是我第一天从sololearn搬到visual studio来练习它,我碰巧遇到了这样的事情。。。这都是有趣的游戏!