Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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#_.net_Console Application_Command Line Arguments_String Length - Fatal编程技术网

C# 将长字符串(作为参数)传递到控制台应用程序

C# 将长字符串(作为参数)传递到控制台应用程序,c#,.net,console-application,command-line-arguments,string-length,C#,.net,Console Application,Command Line Arguments,String Length,我正在用C#创建一个控制台应用程序,在执行时,它会被传递一组数据。其中三个是短字符串,例如用户名、密码等。但是,其中一个是相当长的XML文档 字符串作为命令行参数传入时可以有多长 在执行时向C#console应用程序传递数据是否有更好的替代方案?发现了以下限制: CreateProcess函数的最大命令行长度为 32767个字符。此限制来自UNICODE_字符串 结构 CreateProcess是创建流程的核心功能,因此如果 如果您直接与Win32对话,那么这是您必须遵守的唯一限制 担心但如

我正在用C#创建一个控制台应用程序,在执行时,它会被传递一组数据。其中三个是短字符串,例如用户名、密码等。但是,其中一个是相当长的XML文档

字符串作为命令行参数传入时可以有多长

在执行时向C#console应用程序传递数据是否有更好的替代方案?

发现了以下限制:

  • CreateProcess函数的最大命令行长度为 32767个字符。此限制来自UNICODE_字符串 结构

  • CreateProcess是创建流程的核心功能,因此如果 如果您直接与Win32对话,那么这是您必须遵守的唯一限制 担心但如果您是通过其他方式到达CreateProcess的 也就是说,你所经过的路径可能有其他限制

  • 如果您使用的是CMD.EXE命令处理器,那么您也可以 根据 CMD.EXE

  • 如果您使用的是ShellExecute/Ex函数,那么您将成为 根据INTERNET_MAX_URL_LENGTH(大约2048)命令行 ShellExecute/Ex函数施加的长度限制。(如果你是 在Windows 95上运行时,则限制仅为最大路径。)


还有什么更好的方法或替代方法-使用文件(可能是XML)和所有参数,并将此文件作为命令行参数传递。

如果XML是程序的主要输入,那么我强烈建议您从标准输入中读取它,而不是作为命令行参数(在这种情况下,这似乎不常见)。这将为程序用户提供三种传入XML的方式:

  • 执行您的程序,并手动键入一些XML
  • 使用其他程序的输出:
    other_program…| program…
  • 重定向文件中的标准输入:
    program…
但是,如果XML不是主要输入,我会提供一个命令行开关来指定输入文件名;这为您提供了一种指定XML的方法:

  • 通过参数指定输入文件:
    程序-f input.xml

除此之外,我无法准确回答您的实际问题,但我注意到在过去,Windows的
cmd.exe
(Windows 2000或XP下的IIRC)在命令的最大长度方面相当有限。

将XML数据存储在文件中,并且只将文件路径作为参数传递给命令行工具。或者通过标准输入传递xml。不管怎样,好问题。