【问题标题】:Passing lengthy strings (as an argument) into a console application将冗长的字符串(作为参数)传递到控制台应用程序
【发布时间】:2012-06-19 15:49:14
【问题描述】:

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

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

在执行时将数据传递到 C# 控制台应用程序是否有更好的替代方案?

【问题讨论】:

  • 将 XML 数据存储在一个文件中,并且只将文件路径作为参数传递给命令行工具。
  • 或者通过标准输入传递xml。无论如何,好问题。

标签: c# .net console-application command-line-arguments string-length


【解决方案1】:

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

  • 执行您的程序,并手动输入一些 XML
  • 使用另一个程序的输出:other_program … | program …
  • 从文件重定向标准输入:program … < input.xml

但是,如果 XML 不是主要输入,我会提供一个命令行开关来指定输入文件名;它为您提供了一种指定 XML 的方法:

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

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

【讨论】:

    【解决方案2】:

    找到here following关于限制:

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

    • CreateProcess 是创建进程的核心函数,所以如果你 直接与 Win32 对话,那么这是你必须做的唯一限制 担心。但是,如果您是通过其他人到达 CreateProcess 意思是,那么你经过的路径可能会有其他限制。

    • 如果您使用的是 CMD.EXE 命令处理器,那么您也是 受限于 8192 字符命令行长度限制 CMD.EXE。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多